变量没有悬挂

时间:2015-01-04 22:02:30

标签: javascript hoisting

在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应该被悬挂在它之上。

为什么不这样呢?

2 个答案:

答案 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;它在处理时确实是一个赋值表达式,它出现在代码中的那一行。