【问题标题】:Local scope object局部范围对象
【发布时间】: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


【解决方案1】:

localScopeLexical Environment

作为对is it accessible 问题的回答,ECMAScript 语言规范说明如下:

ECMAScript 程序不可能直接访问或 操纵这些值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-01
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多