为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2019-03-26 21:19:36
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。


查看完整回答
反对 回复 2019-04-04
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

console.log(h) 谢谢

console.log(i)的话,你写的自动执行函数就没有意义了


查看完整回答
反对 回复 2019-04-04
  • 2 回答
  • 0 关注
  • 825 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信