【发布时间】:2019-03-15 13:29:31
【问题描述】:
我找不到明确的答案,所以我会在这里尝试。
编辑:这个问题不是关于 var 是否可以从它所在范围的开头使用,而是我想知道是否在声明全局 var 时声明了 var,或者何时声明了函数调用。
考虑这个例子:
var a = "foo";
function xyz(){
var b = "bar";
}
xyz();
当我运行这段代码时,var b 会被提升到哪里?
会不会:
declare function xyz
declare var a
assign value "foo" to var a
execute xyz()
>> declare var b
assign value "bar" to var b
或者会是:
declare function xyz
declare var a
>> declare var b
assign value "foo" to var a
execute xyz()
assign value "bar" to var b
我知道无法从全局范围访问 var b,但我很好奇这里发生的事情的顺序。
提前致谢
【问题讨论】:
-
声明在运行时不做任何事情,那么你的问题是什么意思呢?
-
我想知道 var b 的声明是在 var a 的声明之后发生在提升之后,还是会在执行 xyz() 时声明
-
据我了解,JS 的执行与 JavaScript 引擎非常相关(因为某些引擎会编译一些代码),所以这取决于您使用的引擎。
-
副本包含其工作原理的确切说明,包括对规范的引用。
标签: javascript hoisting