for(var i=0,arr=[];i<=3;++i) {arr.push( (function(h){ return function(){ console.log(i); } })(i));}arr[0]();//4也是今天被问到的一个问题,就是匿名函数的参数有要求么,我以前的理解那个h只是一个形参,写成什么都行。但是结果并不是想象的0,而是4.给h改成i之后结果变成了0.这是怎么回事了,那个h不应该只是个形参么
2 回答
RISEBY
TA贡献1856条经验 获得超5个赞
这两个函数都是匿名函数,我就成为称为函数和内层函数好了
外层函数的形参为h,而你在外层函数体中并没有使用到形参h,所以每次生成的内层函数使用的都是最终的变量i。每次返回的都是function(){console.log(i)}。
而如果你使用如下形式:
for(var i=0,arr=[];i<=3;++i) {
arr.push(
(function(h){
return function(){
console.log(h);
}
})(i)
);
}
那么每次外层函数自执行时,h都不一样,为数组当前索引。 那么返回的内层函数打印的h也不一样。每次返回的是function(){console.log(0)},function(){console.log(1)}...
把h换成i也是一个意思,外层函数的形参i覆盖了循环的变量i。
添加回答
举报
0/150
提交
取消