变量未提升

Variable not hoisted

在 Javascript 中,变量被提升到它们声明的范围的顶部。
但是在下面的代码中,变量 myvar 似乎没有被提升。

<html>
<body>
</body>
</html>

<script type="text/javascript">
    console.log(typeof myvar);  

    var myvar = "value";    

    console.log(typeof myvar);  

</script>

上面的输出是:

undefined
string

我预计第一行会说 "string" 因为 myvar 应该被提升到它上面。

为什么不是这样?

变量声明被提升,赋值没有。

通过在函数中的任何位置使用 var myvar ,您可以创建一个局部范围的变量 myvar,但是如果您在它后面加上 = something,那么分配将按正常代码顺序进行。

出现了一个骗局,昆汀的回答很好(一如既往),但只是为了更清楚地说明:

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部分),发生在作用域中任何逐步代码之前的是运行, initializationmyvar = "value" 部分;它在处理时实际上是一个赋值表达式),它发生在代码中该行的位置。