Обратите внимание, что это не является дубликатом существующего var и let scope. Я знаю о возможностях var и let, объявлениях и различиях.
Но по приведенному ниже сценарию я не смог оправдать свое понимание разницей let
и var
.
В приведенном ниже коде функция foo
принимает аргумент с именем 'x', который имеет неявную область действия let
- поскольку я не могу переопределить то же имя переменной, используя let
внутри этой функции (раскомментируя последнюю строку в функции foo
выдаст ошибку JS)
"use strict";
function foo(x) {
console.log('Inside function x:', x);
var x = 30; // 'x' redeclared overwriting argument/parameter 'x'
console.log('Redeclared x:', x);
// let x = 400; // uncommenting this line throws error even if you remove 'var x = 30;'
}
foo(100);
// global
let y = 100;
console.log('y:', y);
// var y = 300;
Выполнение приведенного выше кода с двумя закомментированными строками работает отлично, и вы можете увидеть результат в виде:
Inside function x: 100 index.js:4
Redeclared x: 30 index.js:6
y: 100 index.js:13
Раскомментирование последней строки // var y = 300;
выдаст ошибку.
Вопрос : почему повторное выделение «x» с использованием «var
» внутри функции foo
работает, но выдает ошибку, если «y» повторно объявлено в глобальной области видимости с использованием «var
»