【发布时间】:2013-04-05 12:07:07
【问题描述】:
更新:重写问题,因为原始问题有错误的假设(我在控制台中运行的代码已经初始化了我认为未定义的变量)。
这是有道理的:
var obj = { 'whichScope': a };
obj.whichScope; //"ReferenceError: a is not defined"
但是为什么下一个例子没有抛出错误呢?如果第二行在第一行之前运行,为什么 obj.whichScope 不解析为“After”?
var obj = { 'whichScope': a };
var a = "After";
obj.whichScope; //"undefined"
如果上一个示例中的“var a”在 obj 初始化之前运行,则 'a = “After”;' 的任何部分在 obj 初始化之前也运行?
var a = "Before";
var obj = { 'whichScope': a };
a = "After";
obj.whichScope; //"Before"
如果 whichScope 引用了一个返回 'a' 的函数,那么它在最后一个示例中会解析为“After”。
【问题讨论】:
标签: javascript object scope closures delayed-execution