Рейтинг:
1
Dave Kreskowiak
var
объявляется глобальная переменная, а let
объявляет переменную в ограниченной области видимости. В этом случае область действия переменной находится внутри цикла. Вне петли, я не существует.
Если вы оставите это как есть var
, областью действия переменной является конечная функция constfuncs ().
Видеть этот[^] для получения дополнительной информации.
Member 13814166
Мне трудно понять, как я в "function() { return i; };" всегда равен 10. Я думал, что будет поднято только заявление "я", а не ценность, которую оно содержит, я ошибаюсь, думая об этом, или мне чего-то не хватает?
Я бы предположил, что если бы результат был таким же, то он был бы написан так с помощью lets, а не vars:
пусть я; //декларация поднята вверх
функция constfuncs() {
ВАР нам библиотеки и функции = [];
для(i = 0; i < 10; i++)
нам библиотеки и функции[я] = функция() { возвращение я; };
вернуть нам библиотеки и функции;
}
ВАР нам библиотеки и функции = constfuncs();
console.log(funcs[5]()); //выходы 5
Dave Kreskowiak
Хорошо, это отличается от того, что вы спросили выше.
Вы создаете массив функций, все из которых являются "return i;", а не "return the current value of i
в то время, когда экземпляр функции был создан и помещен в массив.
В конце цикла значение i
равно 10, поэтому я не удивлен, что каждый экземпляр функции возвращает 10.