Доступ к переменной перед переопределением ее в замыкании в javascript

#javascript

#javascript

Вопрос:

Рассмотрим следующий код

 var scope = "global scope";
function checkscope() {
    console.log(scope);
    var scope = "local scope";
    console.log(scope);
}
checkscope();
 

При этом в консоли выводится следующее

 undefined
local scope
 

Почему первая console.log печать undefined вместо "global scope" ?

Ответ №1:

Это из-за подъема. Ваше var ключевое слово поднимает новую локальную scope переменную в начало функции, которая не определена.

Ваш код такой же, как:

 function checkscope() {
    var scope;
    console.log(scope);
    scope = "local scope";
    console.log(scope);
}
 

Чтобы получить доступ к глобальному scope из функции, вам нужно будет ссылаться на глобальный объект, который предназначен window для браузеров. Это будет работать, если глобальная scope на самом деле глобальная, а не только в родительской области видимости checkscope() .

 function checkscope() {
    console.log(window.scope); // access the global
    var scope = "local scope";
    console.log(scope);
}
 

Комментарии:

1. И есть ли способ получить доступ к переменной, содержащей global scope ?

2. var scope; // initially undefined

3. @devian если она действительно глобальная, то window.scope будет работать. Но не делайте этого, если вам действительно не нужно.

4. @devian если вы хотите получить доступ к локальной scope переменной из глобальной области видимости, то нет, она недоступна. Если вы хотите получить доступ к глобальной scope переменной из функции, то window.scope это сработает.