天天看點

java script 閉包_java script 閉包

閉包的概念真的是很繞,我就來點實際的代碼。

當我用下面的代碼的時候 發生了閉包,當執行onclick事件的時候,變量一直引用了外部函數的變量,結果i總是4

function newLoad() { //建立頁面加載的事件

var temp ='' ;

for (var i = 1; i <=3; i++) {

var maodian = document.getElementById("maodian" + i); //html控件 id是以maodian為字首

maodian.onclick = function () {//為maodian添加單擊事件

alert("you clicked maodian" + i); //給出點選反應

}

}

}

為了解決上面的問題,我們我們把産生閉包的代碼提出來,建立一個方法。

這樣我們在執行 newLoad()的時候,就三次調用了newLoadExtracted方法,就可以

獲得目前的i值。

function newLoad() { //建立頁面加載的事件

var temp ='' ;

for (var i = 1; i <=3; i++) {

var maodian = document.getElementById("maodian" + i); //html控件 id是以maodian為字首

newLoadExtracted(i, anchor);

}

}

function newLoadExtracted(i, maodian) {

maodian.onclick = function () {//為maodian添加單擊事件

alert("you clicked maodian" + i); //給出點選反應

}

}

我個人了解閉包的發生就是變量作用域的問題,内部函數一直引用了外部函數的變量對象,會一直跟蹤外部函數的變量變化。

當我們新建立了一個函數後,把目前的變量值傳遞到新的函數中,新的函數 newLoadExtracted與函數newLoad就不存在變量依附的關系,

是以變量之間就不會扯不清關系了。