下面的第一個例子是John Resign的學習高級JavaScript#http://ejohn.org/apps/learn/#62#62。它被稱爲修復破碎的閉合。示例1失敗4次。例2僅僅因爲它有一個包裝函數而不同,它傳遞了4次。這是例如#63來自同一教程來自John Resig#62和#63的JavaScript破碎的閉包和包裝函數
有人可以解釋
1)爲什麼i == count++
實例1中失敗。
2)爲什麼i == count++
在包裝函數的幫助下傳遞。包裝函數如何改變事物使其工作?
在此先感謝。
實施例1
var count = 0;
for (var i = 0; i < 4; i++) {
setTimeout(function(){
assert(i == count++, "Check the value of i.");
}, i * 200);
}
實施例2
var count = 0;
for (var i = 0; i < 4; i++) (function(i){
setTimeout(function(){
assert(i == count++, "Check the value of i.");
}, i * 200);
})(i);