首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Javascript作用域链

问关于Javascript作用域链
EN

Stack Overflow用户
提问于 2011-12-23 18:42:29
回答 1查看 398关注 0票数 0

它们之间的区别是什么?

1函数范围-->2[范围]->3范围

代码语言:javascript
复制
var scope = 'window';
var someFunction = function(){
    something go here....
}

某函数的作用域

someFunction[scope]

窗口作用域

是那么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-23 18:54:05

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

简而言之,作用域链从变量/激活对象移动到变量/激活对象,停止于全局对象(因为全局对象实际上是全局执行上下文的激活/变量对象)。

因此,在以下情况下:

代码语言:javascript
复制
var fred;

function foo() {
    alert(fred);
}

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

类似于:

代码语言:javascript
复制
function foo() {
    function bar() {
        alert(fred);
    }
    bar();
}

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

一旦你理解了执行上下文,你也会意识到为什么调用这个“上下文”的值是有误导性的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8615066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档