【发布时间】:2015-02-09 11:29:49
【问题描述】:
我只是好奇 JavaScript 中是否存在“本地范围对象”之类的东西。如果你调用一个函数,它有一个上下文 (this),它是被调用的对象 (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 是什么?
【问题讨论】:
-
“它甚至存在还是可以访问?” 是的,它存在,但是不,你不能访问它。
-
我认为“localScope”是立即关闭的范围,在第一行中定义。由于这个闭包本质上是一个匿名函数,会立即执行(第 4 行),所以你不能引用它。
-
注意,对象不会创建作用域,只有函数可以。范围实际上是写入脚本文件的,您不能以编程方式更改它。此外,函数不知道它定义的对象,除非您不会创建一个保存此信息的变量。
标签: javascript