переменная, созданная с помощью «let» в глобальной области видимости, против переменной, созданной с помощью «var» внутри цикла - PullRequest
3 голосов
/ 11 мая 2019

Я пытаюсь получить некоторый опыт с объявлениями переменных в JavaScript. в следующем коде всякий раз, когда я пытаюсь определить переменную внутри цикла с ключевым словом var, выдается ошибка:

«Uncaught SyntaxError: Идентификатор 'i' уже объявлен".

тогда как, если я использую ключевое слово let (или вообще не использую ключевое слово), проблем не возникает. Я знаю, что в случае, когда я не использую какое-либо ключевое слово, JavaScript использует ту же самую переменную в глобальной области видимости и перезаписывает ее. Я также знаю, что переменные, созданные с помощью ключевого слова «let», считаются областью блока, а переменные, созданные с помощью ключевого слова «var» вне функции, считаются глобальными. но я не понимаю этого поведения! Буду признателен, если кто-нибудь сможет пролить свет на этот вопрос.

этот код:

let i = 78;
console.log(i);
for (var i = 0; i < 4; i++) {
    console.log(i);
    var insideloop = 100;
}

console.log (я); выдает эту ошибку: Uncaught SyntaxError: Идентификатор 'i' уже объявлен

но у этого нет проблем, и выдает следующий вывод:

let i = 78;
console.log(i);
for (let i = 0; i < 4; i++) {
    console.log(i);
    var insideloop = 100;
}
console.log(i);

Результаты: 78 0 1 2 3 78

1 Ответ

1 голос
/ 11 мая 2019

Переменные, объявленные с var внутри любого блока в глобальной области видимости, не являются локальными для этого блока (в вашем случае это блок цикла for), но они находятся внутри глобальной области видимости.

Итак, в вашем первом примере вы пытаетесь повторно объявить переменную i, которая уже была объявлена ​​ранее в глобальной области видимости с let.

for(var i =0;i<5;i++){}
console.log(i); //i is in global scope

Где, как let, если объявлено в любом блоке в вашем случае, он ограничен блоком цикла for. Его нет снаружи.

for(let i =0;i<5;i++){}
console.log(i); //i is in global scope
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...