Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:初始化对象后初始化内部变量_Javascript_Object_Scope_Closures_Delayed Execution - Fatal编程技术网

JavaScript:初始化对象后初始化内部变量

JavaScript:初始化对象后初始化内部变量,javascript,object,scope,closures,delayed-execution,Javascript,Object,Scope,Closures,Delayed Execution,更新:重写问题,因为原始问题有错误的假设(我在控制台中运行的代码已经初始化了我认为未定义的变量) 这是有道理的: var obj = { 'whichScope': a }; obj.whichScope; //"ReferenceError: a is not defined" 但是下一个例子怎么没有抛出错误呢?如果第二行在第一行之前运行,为什么obj.whichScope不能解析为“之后” 如果上一个示例中的“var a”在obj初始化之前运行,“a=”之后的任何部分是否在初始化obj之前

更新:重写问题,因为原始问题有错误的假设(我在控制台中运行的代码已经初始化了我认为未定义的变量)

这是有道理的:

var obj = { 'whichScope': a };
obj.whichScope; //"ReferenceError: a is not defined"
但是下一个例子怎么没有抛出错误呢?如果第二行在第一行之前运行,为什么obj.whichScope不能解析为“之后”

如果上一个示例中的“var a”在obj初始化之前运行,“a=”之后的任何部分是否在初始化obj之前也运行

var a = "Before";
var obj = { 'whichScope': a };
a = "After";
obj.whichScope; //"Before"

如果whichScope引用了一个返回“a”的函数,那么在上一个示例中,它确实会解析为“After”。

这就是变量

参考资料:

变量(用
var
声明)和函数被提升到其作用域的顶部

从技术上讲,你的剧本是这样的:

var a;  // = undefined
var obj = { 'whichScope': a };
a = "After";
虽然你的第一个例子没有做到你所说的。
obj.whichScope
的值是
未定义的
,正如预期的那样

演示:

对于上一条语句,
如果whichScope引用了一个返回“a”的函数,那么在第二个示例中它会解析为“After”。
-这是因为
a
的值没有被捕获(通过闭包)。设置属性时,会立即捕获其值(与闭包无关)

var a;  // = undefined
var obj = { 'whichScope': a };
a = "After";