带有“var”且没有“var”的javascript全局变量

时间:2011-08-01 16:55:34

标签: javascript global var

  

可能重复:
  Difference between using var and not using var in JavaScript

我知道我应该总是使用'​​var'来定义函数中的局部变量。

当我定义一个全局函数时,使用'var'之间的区别是什么?

我在互联网上看到的一些代码示例使用

var globalVar = something;
globalVar = something;

有什么区别?

3 个答案:

答案 0 :(得分:21)

嗯,区别在于技术上,一个简单的作业globalVar = 'something';没有声明一个变量,该作业只会创建一个全局对象上的属性,以及全局对象是作用域链中最后一个对象的事实,使其可以解析。

另一个区别是绑定的方式,变量被绑定为其环境记录的“不可删除”属性,例如:

var global1 = 'foo';
delete this.global1; // false

global2 = 'bar';
delete this.global2; // true

我强烈建议您始终使用var语句,例如,您的代码将在ECMAScript 5严格模式下中断,不允许对未声明的标识符进行分配以避免隐式全局。< / p>

答案 1 :(得分:6)

简短:全球背景没有区别**。

Long:全局上下文变量对象是全局上下文本身。这就是我们可以在函数 - eval上下文中访问全局variablesmethods的原因。但是,var语句只是确保您在当前上下文中定义变量,因此在全局上下文中省略该变量没有任何区别。 异常:ES5严格模式在看到没有var的声明时可能会抛出错误。


** 唯一的区别是,var将在当前(执行)上下文中声明一个没有定义的变量。这发生在js解析时,因此引擎知道在上下文中有一个具有该名称的变量。省略var将最终从global object直接访问属性。

答案 2 :(得分:2)

在浏览器中的任何功能之外,在范围方面使用var与否之间没有区别。在您的两个示例中,globalVar都是window的成员。

通常,最好不要使用这些变量,这样全局命名空间就不会变得杂乱无章。