猿问

关于自执行函数的参数问题?

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不应该只是个形参么


千巷猫影
浏览 826回答 2
2回答

RISEBY

这两个函数都是匿名函数,我就成为称为函数和内层函数好了外层函数的形参为h,而你在外层函数体中并没有使用到形参h,所以每次生成的内层函数使用的都是最终的变量i。每次返回的都是function(){console.log(i)}。而如果你使用如下形式:for(var i=0,arr=[];i<=3;++i) {arr.push(&nbsp; (function(h){&nbsp; &nbsp; return function(){&nbsp; &nbsp; &nbsp; console.log(h);&nbsp; &nbsp; }&nbsp; })(i));}那么每次外层函数自执行时,h都不一样,为数组当前索引。 那么返回的内层函数打印的h也不一样。每次返回的是function(){console.log(0)},function(){console.log(1)}...把h换成i也是一个意思,外层函数的形参i覆盖了循环的变量i。

一只萌萌小番薯

console.log(h) 谢谢console.log(i)的话,你写的自动执行函数就没有意义了
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答