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

for因闭包引起的实际问题

for因闭包引起的实际问题

函数式编程 2019-04-14 11:22:02
$(document).ready(function(){varspans=$("#divTestspan");for(vari=0;i
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

点击的时候再去取i,此时i已经变成length
你看这个例子就懂了
closure
click
i++
                            
查看完整回答
反对 回复 2019-04-14
?
FFIVE

TA贡献1797条经验 获得超6个赞

这样写就可以了。
$(document).ready(function(){
varspans=$("#divTestspan");
for(vari=0;i;(function(i){
spans[i].onclick=function(){
alert(i);
}
})(i);
}
});
说一说为什么,因为页面加载完的时候,for循环也瞬间执行完了,点击的时候i早就变成了length,而且大家算是共享这一个i。但是为什么上面说的行呢,因为将i放到一个自动执行的闭包中,首先它会自动执行,然后实参传递到形参的时候,非引用类型的实参传递给形参会复制一份,而不是共享一份,所以就会有n个i了,每个i都不一样。
                            
查看完整回答
反对 回复 2019-04-14
  • 2 回答
  • 0 关注
  • 429 浏览
慕课专栏
更多

添加回答

举报

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