Почему const работает в некоторых for-loops в JavaScript?
Я знаю, почему const
не работает в for-loop. Нам нужно создать новую область и скопировать ее по значению. Так что это не будет летать.
for(const i = 0; i < 5; i++) console.log(i);
В то время как это будет.
for(let i = 0; i < 5; i++) console.log(i);
Тем не менее, я заметил, что оба они работают при циклизации, хотя свойства объекта похожи на это.
for(let property in thingy) console.log(property);
for(const property in thingy) console.log(property);
Я не уверен, почему.
Ответы
Ответ 1
for (const property in object)
работает, потому что с каждой итерацией вы получаете новую переменную, которая привязана только к этой итерации. Вы можете легко проверить это, используя замыкание внутри цикла:
for (const property in {a: 1, b: 2}) {
setTimeout(() => {
console.log(property);
}, 100);
}
Ответ 2
В первом примере i
изменяется с помощью i++
. A const
не может быть изменен, поэтому вы получите сообщение об ошибке.
Во втором примере property
переопределяется для каждой итерации (каждый экземпляр выходит из области видимости и создается новый, а не просто переписывается одной и той же переменной) цикла for
. Поскольку вы фактически переопределяете, а не изменяете значение, const
работает просто отлично.