Member 13814166 Ответов: 1

Как бы этот код был написан без использования ключевого слова var?


Как бы этот код был написан и выдал тот же результат, если бы вы использовали ключевое слово let, а не ключевое слово var

function constfuncs() {
    var funcs = [];
    for(var i = 0; i < 10; i++) 
       funcs[i] = function() { return i; };
    return funcs;
}

var funcs = constfuncs();
console.log(funcs[5]()); //Outputs 10



Что я уже пробовал:

Я не совсем понимаю подъем JavaScript, поэтому хотел посмотреть, как этот фрагмент кода будет работать при использовании более понятного типа переменной

1 Ответов

Рейтинг:
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.