它们之间的区别是什么?
1函数范围-->2[范围]->3范围
var scope = 'window';
var someFunction = function(){
something go here....
}某函数的作用域
someFunction[scope]
窗口作用域
是那么回事吗?
发布于 2011-12-23 18:54:05
如果你想理解作用域链,你应该阅读Richard Cornford关于JavaScript Closures的文章,特别是关于Identifier Resolution, Execution Contexts and scope chains的那部分。
简而言之,作用域链从变量/激活对象移动到变量/激活对象,停止于全局对象(因为全局对象实际上是全局执行上下文的激活/变量对象)。
因此,在以下情况下:
var fred;
function foo() {
alert(fred);
}标识符fred是全局变量/激活对象的属性(在全局代码的情况下是全局对象本身)。当调用foo()时,将使用包含全局对象的作用域链创建一个新的变量/激活对象。首先在内部变量object上解析标识符fred,因为在那里找不到它,所以搜索链上的下一个对象(全局对象)。
类似于:
function foo() {
function bar() {
alert(fred);
}
bar();
}因此,当foo()被调用时,它接着调用bar(),现在fred首先针对bar的变量对象进行解析,然后是foo的,然后是全局对象。
一旦你理解了执行上下文,你也会意识到为什么调用这个“上下文”的值是有误导性的。
https://stackoverflow.com/questions/8615066
复制相似问题