更新:重写问题,因为原始问题有错误的假设(我在已经初始化我认为未定义的变量的控制台中运行代码)。
这是有道理的:
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”。