javascript - 关于 Javascript 作用域链

标签 javascript function chain

他们有什么区别?
①函数的作用域-->②[[scope]]---->③作用域

var scope = 'window';
var someFunction = function(){
    something go here....
}

someFunction 的作用域
someFunction[[scope]]
窗口作用域
是这样吗?

最佳答案

如果你想了解作用域链,你应该阅读 Richard Cornford 的文章 JavaScript Closures ,特别是 Identifier Resolution, Execution Contexts and scope chains 上的部分.

简单地说,作用域链从变量/激活对象移动到变量/激活对象,并在全局对象处停止(因为全局对象实际上是全局执行上下文的激活/变量对象)。

所以在这种情况下:

var fred;

function foo() {
    alert(fred);
}

标识符fred成为全局变量/激活对象的属性(在全局代码的情况下是全局对象本身)。当调用foo()时,会创建一个新的变量/激活对象,其作用域链包含全局对象。标识符fred首先在内部变量对象上解析,并且由于在那里找不到它,因此搜索链上的下一个对象(全局对象)。

类似地:

function foo() {
    function bar() {
        alert(fred);
    }
    bar();
}

因此,当调用 foo() 时,它会调用 bar(),现在 fred 首先针对 bar 的变量对象进行解析,然后是 foo 的,然后是全局对象。

一旦理解了执行上下文,您也会意识到为什么将this的值称为“上下文”会产生误导。

关于javascript - 关于 Javascript 作用域链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8615066/

相关文章:

javascript - 编译时的javascript函数和var区别

php - CodeIgniter:My_Lang 中的 get_instance

mysql - CakePHP 模型链查找

javascript - 如何为子原型(prototype)创建不同的原型(prototype)变量?

c# - 如何 Moq Fluent 接口(interface)/链方法

php - 当通过常规表单提交或 Ajax 请求访问时使浏览器重定向的表单 - 这可能吗?

javascript - Razor 页面中的最佳实践 : Using AJAX or Handlers for post/get requests

javascript - 我无法使用 .innerHTML 更改 HTML。不断收到消息 "cannot set innerHTML property of null"

javascript - 如何使用 JavaScript 猜测文件扩展名(客户端)

javascript - 单击时切换功能