2015-02-09 3 views
6

Мне просто интересно, существует ли такая вещь, как «объект локальной области видимости» в JavaScript. Если вы вызываете функцию, она имеет контекст(), который является объектом, на который он был вызван (function f() {return this;}; obj.f = f; obj.f(); //returns obj;), и область, которая создается при каждом вызове функции. Объем используется для определения локальных переменных, как показано в следующем примере:Локальный объект области

var globalScopeVar = 1; 
(function() { 
    var localScopeVar = 2; 
})(); 

В обоих областей this относится к глобальной связи (как правило, window), так как функция не была вызвана на любой объект. Тем не менее, меня интересует «объект области видимости», т. Е. Объект, в котором определены переменные в пределах области. Для глобального масштаба это обычно window, так же, как глобальный контекст:

window.globalScopeVar; // 1 

Однако то, что это «сфера объекта» в локальной области видимости вызова функции? Он существует или доступен? Есть ли способ доступа к объекту, на котором определено значение localScopeVar?

(function() { 
    var localScopeVar = 2; 
    localScope.localScopeVar; // 2 
})(); 

Что такое localScope в этом примере?

+3

* «Он существует или доступен?» * Да, он существует, но нет, вы не можете получить к нему доступ. – dfsq

+1

Я думаю, что «localScope» - это область непосредственного закрытия, определенная в первой строке. Поскольку это закрытие по сути является анонимной функцией, которая выполняется немедленно (строка: 4), вы не можете ссылаться на нее. –

+0

Обратите внимание, что объекты не создают области видимости, работают только функции. Объем буквально записывается в файл сценария, и вы не можете его программно изменить. Кроме того, функция не знает об объекте, в котором она определена, если вы не создадите переменную, содержащую эту информацию. – Teemu

ответ

1

Это localScope является Lexical Environment.

В ответ на ваш вопрос, если is it accessible, Спецификация ECMAScript Язык говорит следующее:

Это невозможно для программы ECMAScript для прямого доступа или манипулировать эти значения.

Смежные вопросы