Javascript 局部作用域对象
我只是好奇JavaScript中是否有“局部范围对象”这样的东西。如果调用一个函数,它有一个上下文(Javascript 局部作用域对象,javascript,Javascript,我只是好奇JavaScript中是否有“局部范围对象”这样的东西。如果调用一个函数,它有一个上下文(this),这是它被调用的对象(function f(){return this;};obj.f=f;obj.f();//returns obj;),以及在每次函数调用时创建的范围。该范围用于定义局部变量,如下例所示: var globalScopeVar = 1; (function() { var localScopeVar = 2; })(); 在这两个作用域中,此引用全局上下文(
this
),这是它被调用的对象(function f(){return this;};obj.f=f;obj.f();//returns obj;
),以及在每次函数调用时创建的范围。该范围用于定义局部变量,如下例所示:
var globalScopeVar = 1;
(function() {
var localScopeVar = 2;
})();
在这两个作用域中,此
引用全局上下文(通常为窗口
),因为函数未在任何对象上调用。不过,我感兴趣的是“范围对象”,即定义范围内变量的对象。对于全局范围,这通常是窗口
,就像全局上下文一样:
window.globalScopeVar; // 1
但是,函数调用的本地范围中的“范围对象”是什么?它是否存在或可访问?有没有办法访问定义了localScopeVar
的对象
(function() {
var localScopeVar = 2;
localScope.localScopeVar; // 2
})();
本例中的
localScope
是什么?
作为对您的问题的回答,ECMAScript语言规范说明如下:
ECMAScript程序不可能直接访问或
操纵这些值
“它是否存在或是否可访问?”是的,它存在,但不,您无法访问它。我认为“localScope”是第一行中定义的立即闭包的范围。由于这个闭包本质上是一个立即执行的匿名函数(第4行),所以您不能引用它。作用域实际上是写入脚本文件的,您不能以编程方式对其进行更改。此外,函数不知道它在其中定义的对象,除非您不创建包含此信息的变量。