我有JavaScript代码。
var a = [];
for (var i = 0; i < 5; i++) {
a[i] = function () {
alert(i);
};
}
a[2]();
如果我调用a[2]()
,我希望看到包含2
的邮件,但我会看到5
。
要修复它我可以像这样重写它:
for (var i = 0; i < 5; i++) {
(function (v) {
a[i] = function () {
alert(v);
}
})(i)
}
但我无法理解它是如何运作的。那么为什么我需要将我的函数代码封装起来呢?