for循环里变量作用域
for(var i in data){
$('#test'+i).on('change',function(){
console.log(i);
})
}
每个元素触发事件都会显示最后一个data里的i,数组就是data.length-1
感觉是闭包相关的问题,请问该如何修改
PS:let的写法我知道 但是浏览器不兼容没法用
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
你可以试一试看看可以解决你的问题;
for(var i in data){
(function(i){
$('#test'+i).on('change',function(){
}
我来开个脑洞:既然是注册事件监听,那有没有可能把这个值当自定义数据传进去?
例如:
百度闭包!google闭包
你可以这样理解:
for循环注册事件不太好,性能太差,通用性也差,还是委托吧
这跟js中变量的作用域有关,js并不以{}为作用域,而是以function为作用域的,你这个i输出的都是data的长度,
可以使用闭包来解决,或者使用let来代替var
用一个立即调用函数保存作用域,当一个函数嵌套另一个函数,函数定义时的作用域链到函数执行时依然有效.