0

正如这两个讨论所说:

带有'var'和不带'var'的javascript全局变量[重复]

JavaScript 中使用 var 和不使用 var 的区别

全局变量是否带有'var'应该没有什么不同。

但是,以下两个代码片段会得到不同的结果。

第一:

if(h == undefined){
  h = 4;
}

第二个:

if(h == undefined){
  var h = 4;
}

对于第一个,我会收到错误消息:“ReferenceError: h is not defined。”

不过第二个还好。

真正奇怪的是,var h = 4;h == undefined让全局变量可以以某种方式初始化。

4

2 回答 2

0

您需要在块之外初始化变量 h 以获得所需的结果...... Javascript 没有块范围。但 D. Crockford 说的并不总是很好

于 2013-09-09T04:22:24.280 回答
0

正如 Musa 指出的那样,JS 首先执行变量声明(在您所处的上下文中)。因此,如果您曾经在上下文中使用 var 定义变量,它将是已知的,其值为 undefined。因为无论如何你都应该声明你的变量而不是依赖于全局范围,所以你应该总是使用第二个。如果出于特定原因想使用第一个,可以这样写:

if (window.h === undefined) {
    h = 4;
}
于 2013-09-09T04:24:35.327 回答