#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
это сработает.