閉包存儲的是其外部變量的引用而不是值。bash
function warpElements(a) {
var result = [],
i, n;
for (i = 0, n = a.length; i < n; i++) {
// console.log(i);
result[i] = function() {
// console.log(i);
return a[i];
}
// console.log(`result[${i}]:${result[i]}`);
}
// console.log(result);
return result;
}
var warpped = warpElements([10, 20, 30, 40, 50]);
var f = warpped[0];
f(); // undefined
複製代碼
經過當即調用的函數表達式來建立一個局部做用域。閉包
function warpElements(a) {
var result = [],
i, n;
for (i = 0, n = a.length; i < n; i++) {
(function(j) {
result[i] = function() {
return a[j];
}
})(i)
}
return result;
}
var warpped = warpElements([10, 20, 30, 40, 50]);
var f = warpped[0];
f();
複製代碼