Почему глобальные объявления let переопределяются переменными с незаданной областью? - PullRequest
0 голосов
/ 11 марта 2019

Когда мы создаем переменную без указания let или var, она добавляется к объекту окна в браузере. Например

function change(){
    val = 20;
}
change();
console.log(window.val); //20
console.log(val);  //20

Здесь я получаю значение печати обоих журналов консоли 20. Но я делаю то же самое, используя let, он не добавляется к объекту окна. Я видел этот ответ с объяснением, почему это происходит.

let val = 20;
console.log(window.val); //undefined
console.log(val); //20

Теперь, в приведенном ниже коде, кто-то может объяснить, когда я назначаю переменную un scoped внутри функции, почему она не добавляется в window scope? Вместо этого, как он изменяет значение переменной, объявленной с let

let value = 10;
function change(){
    value = 20;
}
change();
console.log(window.value); //undefined 
console.log(value); //20  why this is 20?

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

MDN говорит об этом var:

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

MDN говорит об этом let:

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

Они оба попадают в область действия, которая затем распространяется на дочерние области, но в какую область они попадают икак они определяют эту область видимости иначе.

Обратите внимание, что у всего элемента <script> есть неявный блок, и этот неявный блок наследует window как область предка.Переменная, объявленная var, в конечном итоге попадает в window, а переменные, объявленные let, попадают в этот неявный блок.

0 голосов
/ 11 марта 2019

Объявление переменных с помощью let на верхнем уровне вашего скрипта позволяет вам получить доступ к нему внутри всего скрипта и даже снаружи.Внутри вашей функции вы не присваиваете значение переменной с незаданной областью.

Даже если бы вы написали свою функцию, как показано ниже, она не была бы назначена объекту окна, как это было бы тогда в области действия функции.

function change(){
var value = 20;
}
...