闭包:
闭包是指有权访问另一个函数作用域中的变量的函数。
例子:
function fn() {
var result = new Array();
for (var i = 0; i < 5; i++) {
result[i] = function () {
return i;
}
}
return result;
}
alert(fn()[0]());
以上代码每个数组输出同样的值,因为闭包总是会返回函数处理的最后一个结果。当fn函数返回后,变量i的值是5,因此压入数组的每个函数参数引用指向i,所以每个数组都是5的值。
解决办法:
function fn() {
var result = new Array();
for (var i = 0; i < 5; i++) {
result[i] = function (num) {
return function () {
return num;
};
} (i);
}
return result;
}
alert(fn()[0]());
这次闭包是传入i然后立即执行完成并且销毁,之后把最终结果返回到数组。