В Node, почему попытка повторно объявить итератор для JavaScript for-l oop дает ошибку «не определено» вместо ошибки «повторяющееся объявление»? - PullRequest
1 голос
/ 03 августа 2020

Следующий код выводит ошибку «дублированное объявление» в Node.

let i = 2;
let i = i;
// Duplicate declaration "i"

Однако внутри for-l oop при доступе к «i» происходит другая любопытная ошибка. Я ожидаю, что будет повторяющаяся ошибка объявления. Вместо этого я получаю «я не определен».

for (let i = 0; i < 10; i++) {
  let i = i;
} 
// ReferenceError: i is not defined

Почему я не могу быть определен? Почему ошибка ReferenceError вместо повторяющегося объявления?

1 Ответ

2 голосов
/ 03 августа 2020

Для первой ситуации ошибка возникает во время let i, поскольку i уже был объявлен в той же области.

let i = 2;
let i = i;
//  ↑ i is already defined in current scope 

В циклах for на самом деле есть две области. Во вложенной области вы можете переопределить i, это просто закроет внешнюю область i.

Но ошибка возникает при доступе к значению i, потому что вы обращаетесь к нему при определении это, поскольку внутренний i не был инициализирован.

let i = 0;
{
  let i = i;
  //      ↑ i hasn't been initialized yet, you can't access it as a value
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...