Подтвердить что ты не робот

Почему 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);

Я не уверен, почему.

4b9b3361

Ответ 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 работает просто отлично.