写了这样一段代码:
这段代码的目的是使用循环为多个元素帮点点击事件,但是测试发现并没有按照预想的那样正确的为元素绑定事件。
后来发现回调函数中的变量 i
的颜色和其他 i
的颜色不同,鼠标悬浮在该 i
上,IDEA 提示如下:
Mutable variable is accessible from closure.
我知道这是循环和异步调用的经典问题,可以通过闭包来解决,修改代码如下:
function clickImageIcon(msgArr, options) {
for (var i = 0; i < msgArr.length; i ++) {
(function(index) {
$('.file-wrapper:eq(' + index + ')').bind('click', function () {
recognitionContent(msgArr[index]);
$('#myModal').modal(options);
});
})(i);
}
}
但是在 Stack Overflow 上有人提出用 let
代替 var
也可以解决这个问题,代码如下:
function clickImageIcon(msgArr, options) {
for (let i = 0; i < msgArr.length; i ++) {
$('.file-wrapper:eq(' + i + ')').bind('click', function () {
recognitionContent(msgArr[i]);
$('#myModal').modal(options);
});
}
}
我想知道为什么换成 let
也可以解决问题,求各位大神告知!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.