写了这样一段代码:

这段代码的目的是使用循环为多个元素帮点点击事件,但是测试发现并没有按照预想的那样正确的为元素绑定事件。
后来发现回调函数中的变量 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 也可以解决问题,求各位大神告知!