他们有什么区别?
①函数的作用域-->②[[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/