变量未吊装

Variable not hoisted

本文关键字:变量      更新时间:2023-09-26

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

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

上面的输出是:

undefined
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部分),发生在范围中的任何分步代码运行之前,以及初始化myvar = "value"部分;在处理时它实际上是一个赋值表达式),它发生在代码中的该行的位置。