У меня есть функция внизу, которая всегда дает мне результат 5. Я вижу, что функция inner выполняется в global context
, поэтому результат равен 5.Функция всегда приводит к тому же номеру
Я попытался обернуть весь цикл внутри замыкания, так что он создает новую область, но она не удалась.
var myAlerts = [];
for (var i = 0; i < 5; i++) {
myAlerts.push(
function inner() {
alert(i);
}
);
}
myAlerts[0](); // 5
myAlerts[1](); // 5
myAlerts[2](); // 5
myAlerts[3](); // 5
myAlerts[4](); // 5
Может ли кто-нибудь сказать мне, как исправить эту проблему?
на стороне отметить его плохую идею, чтобы определить функцию внутри цикла. Это означает, что функция должна создаваться для каждого цикла. – Craicerjack
Что происходит в вашем коде, так это то, что вы нажимаете на функцию 'inner()' в свой массив. Поэтому для каждого шага в вашем цикле вы вызываете функцию под названием 'inner()', которая принимает значение 'i' в массив. Проблема здесь в том, что когда вы обращаетесь к значениям, вызываемым этой функцией 'inner()' и передавая ей значение 'i'. Учитывая, что последнее значение i в вашем коде было 5, вы вызываете 'inner (5)' для каждого элемента в 'myAlerts'. – Craicerjack