我在理解高程上讲的闭包的时候 ,理解上产生过许多错误,我们首先来看高程上的函数
1.
function opp() {
var result = [];
for (var i=0 ;i<3;i++){
result[i]=function () {
return i;
}
}//到这i==3;
console.log(result[0]); // function{ return i}
console.log(result[1]); // function{ return i}
console.log(result[2]); // function{ return i}
console.log("result[0]执行结果"+result[0]()+"此时i="+i ); //result[0]执行结果3此时i=3
console.log("result[1]执行结果"+result[1]()+"此时i="+i ); // result[0]执行结果3此时i=3
console.log("result[2]执行结果"+result[2]()+"此时i="+i ); // result[0]执行结果3此时i=3
}
opp();
在这个函数中,循环结束的时候 注意 result是一个函数数组 ,数组元素既不是 1 2 3 也不是 3 3 3
也不是 function{ return1} function{ return 2} function{return 3}
每个数组元素都是 function{return I}
只有执行的时候才会调用i的值 此时i的值已经是3了
2.关于高程上为了让闭包符合预期做的逆名函数
result[i]=(function (num) {
return function(){
return num;
}
}
})(num)
实际上里面嵌套的匿名函数是多余的,写成下面代码即可
result[i]=(function (num) {
return num;
}
})(i)
此时的result[0] == function { return 0}
此时的result[1] == function { return 1}
此时的result[2] == function { return 2}
相当于立即将i传入匿名函数中的局部变量num,然后result里面的内容就再与i没有关系了。