0
У меня есть код на 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)
}
Но я не могу понять, как это работает. Итак, зачем мне сворачивать код функции на закрытие?
Потому что, в отличие от других языков, * не существует неявная область в 'for' заявления в JS. * Анонимные функции, с другой стороны, имеют свои собственные рамки и захватить внешние местные жители , поэтому обертывание тела цикла внутри функции и вызов ее сразу же решает проблему. –
Заметим также, что в этом случае * i * является глобальным. – RobG
@ RobG, внешний вид. Мы не знаем, что это такое - это может быть глобальная область действия, или внутри функции, или даже другое закрытие. –