JavaScript变量未定义与未定义

埃里克·比斯哈德(Eric Bishard)

我有一个带有以下JavaScript的HTML页面。

alert(box);
box = "Thinking outside the box";

在控制台中,我收到“ Uncaught ReferenceError:框未定义”

当我将其更改为:

alert(box);
var box = "Thinking outside the box";

警报被调用并显示未定义。我需要能够解释这一点,我对为什么会这样有一个模糊的想法。我知道当我使用var时,JavaScript在执行警报之前就知道该变量存在,但未必为其分配了一个值?我要离开这里吗?需要一些帮助来理解这一点。

jfriend00

当使用定义变量时var变量的声明被“提升”到作用域的顶部,因此该变量是为整个作用域定义的。变量的初始化(分配其初始值)保留在代码中的同一位置。

因此,在第二个示例中,当您执行时alert(box),由于box已声明var语句因此已经声明了该变量您的第二个示例:

alert(box);
var box = "Thinking outside the box";

基本上等效于此(box变量的声明被提升到作用域的顶部):

var box;
alert(box);
box = "Thinking outside the box";

这会使box变量在alert(box)语句之前声明(尽管未初始化),因此您得到的结果与所声明的变量一致,但是尚无值(alert()报告undefined存在该变量存在但尚未初始化时发生的情况) )。

您的第一个示例未使用var,因此没有提升,因此在您执行该操作的地方alert(box),根本没有任何变量命名box,因此您得到了uncaught reference error

在SO上有许多描述起重细节的帖子。您可以在此处查看其中的一长串列表:https : //stackoverflow.com/search?q= javascript+variable+hoisting,在这里您可以找到有关变量提升的更多说明。

注意:函数声明也被悬挂,因此您发现的一些帖子将是关于函数声明而不是变量声明的,尽管概念几乎是相同的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章