在Javascript中,变量被提升到声明范围的顶部。
但是,在以下代码中,似乎并未提升变量myvar
。
<html>
<body>
</body>
</html>
<script type="text/javascript">
console.log(typeof myvar);
var myvar = "value";
console.log(typeof myvar);
</script>
以上的输出是:
undefined
string
我预计第一行会说&#34; string&#34;因为myvar
应该被悬挂在它之上。
为什么不这样呢?
答案 0 :(得分:10)
变量声明已悬挂,分配不会。
在函数中的任意位置使用var myvar
,您可以创建一个本地范围的变量myvar
,但如果您使用= something
进行操作,则会进行分配按照正常的代码顺序。
答案 1 :(得分:2)
出现这种情况,Quentin的答案很好(一如既往),但只是拼出来了:
JavaScript引擎实际处理该代码的方式如下:
// Before any step-by-step code
var myvar;
// Now step-by-step starts
console.log(typeof myvar); // undefined since no value has been written to it
myvar = "value";
console.log(typeof myvar); // "value" because that's its value now
就是这样:
var myvar = "value";
......实际上是在两个不同时间发生的两件事。 变量声明(var myvar
部分),在运行范围中的任何分步代码之前发生,以及初始化({{ 1}} part;它在处理时确实是一个赋值表达式,它出现在代码中的那一行。