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

以下两段代码执行结果为什么不一样,闭包

以下两段代码执行结果为什么不一样,闭包

天生我才必有用哈 2019-08-01 22:35:46
for(var i=1;i<=20;i++){     var x=i;     setTimeout(function () {         console.log(0.05*x);     },50*x); } for(var i=1;i<=20;i++){     (function (x) {         setTimeout(function () {             console.log(0.05*x);         },50*x);     })(i); }
查看完整描述

1 回答

已采纳
?
pardon110

TA贡献1038条经验 获得超227个赞

前者是值引用,后者是值复制。换句话而言,后者才是闭包(立即函数调用表达式会形成一个执行环境,该环境有内部函数执行体依赖的每次循环变量的副本),而前者在循环体结束后,执行循环体,此时函数体引用的的i值是20,而非每次的循环变量值

查看完整回答
1 反对 回复 2019-08-02
  • 1 回答
  • 1 关注
  • 398 浏览
慕课专栏
更多

添加回答

举报

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