1、閉包實例
2、上述閉包輸出結果:10 10 10 10 10 10 10 10 10 10
分析:1、arr[i]=function(){document.write(i+"")}是賦值語句;所以document.write(i+"")是沒執行的;因此for循環中的i和數組中function的i不是一一對應實時的;可也通過
function test() {
var arr = [];
for (var i = 0; i < 10; i++) {
arr[i] = function () {
document.write(i + "");
}
}
return arr;
}
var myArr = test();
for (var j = 0; j < 10; j++) {
document.write(myArr[j]);
}
輸出結果爲:function(){document.write(i+" ")}function(){document.write(i+" ")}function(){document.write(i+" ")}..........
2、閉包中產生閉包;所以最後函數執行的時候,函數訪問的i是test函數作用域中i的變量,而那時候函數i的值已經是10了;所以下面在執行數組中的函數的時候查詢的i的值全是10;
3、有什麼辦法可也讓函數輸出爲正常的數字序列嗎?下面這個寫法可也解決,有且僅當這樣寫才能解決閉包的一個問題,其原理就是產生一個閉包對應一個閉包的作用域鏈;