国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

JavaScript 常見(jiàn)錯(cuò)誤六:在for循環(huán)中的不正確函數(shù)調(diào)用

2021-09-18 15:59 更新

請(qǐng)大家看以下代碼:

var elements = document.getElementsByTagName('input');

var n = elements.length; 

for (var i = 0; i < n; i++) {     

elements[i].onclick = function() {         

console.log("This is element #" + i);     }; } 

運(yùn)行以上代碼,如果頁(yè)面上有10個(gè)按鈕的話,點(diǎn)擊每一個(gè)按鈕都會(huì)彈出 “This is element #10”! 。這和我們?cè)阮A(yù)期的并不一樣。這是因?yàn)楫?dāng)點(diǎn)擊事件被觸發(fā)的時(shí)候,for循環(huán)早已執(zhí)行完畢,i的值也已經(jīng)從0變成了。

我們可以通過(guò)下面這段代碼來(lái)實(shí)現(xiàn)真正正確的效果:

var elements = document.getElementsByTagName('input'); 

var n = elements.length; 

var makeHandler = function(num) {  // outer function

      return function() { 

console.log("This is element #" + num);      }; }; 

for (var i = 0; i < n; i++) 

{     elements[i].onclick = makeHandler(i+1); }

在這個(gè)版本的代碼中, makeHandler 在每回循環(huán)的時(shí)候都會(huì)被立即執(zhí)行,把i+1傳遞給變量num。外面的函數(shù)返回里面的函數(shù),而點(diǎn)擊事件函數(shù)便被設(shè)置為里面的函數(shù)。這樣每個(gè)觸發(fā)函數(shù)就都能夠是用正確的i值了。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)