先看一个例子
function fuc1() {
var result = new Array();
for(var i = 0; i < 7; i++) {
result[i] = function() {
return i;
};
}
return result;
}
执行上面代码:
for (var i = 0; i < 7; i++) {
console.log(fuc1()[i]());
fuc1()[i]() = null;
}
预想结果:是每个函数输出的结果一次是0-6;
实际结果:console.log()全是7;
这是因为在执行闭包函数的时候,每个闭包函数的作用域链中都保存着他的包含函数的活动对象,也就是for循环已经结束时的i值,结束的时候i = 7;
通过让闭包函数立即执行可以达到每个函数输出预想的结果。
function funRightnow() {
var result = new Array();
for (var i = 0; i < 7; i++) {
result[i] = function() {
return i;
}();
}
return result;
}
for (var i = 0; i < 7; i++) {
console.log(funRightnow()[i]);
funRightnow()[i] = null;
}