带”var”且不带”var”的javascript全局变量

javascript global variable with 'var' and without 'var'

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Difference between using var and not using var in JavaScript

我理解我应该始终使用"var"来定义函数中的局部变量。

当我定义一个全局函数时,使用"var"有什么区别?

我在网上看到的一些代码示例

1
2
var globalVar = something;
globalVar = something;

有什么区别?


区别在于,从技术上讲,一个简单的赋值(如globalVar = 'something';不声明变量),赋值只会在全局对象上创建一个属性,全局对象是范围链中的最后一个对象,这使得它是可解析的。

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

1
2
3
4
5
var global1 = 'foo';
delete this.global1; // false

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

我强烈建议您始终使用var语句,例如,您的代码将在ecmascript 5严格模式下中断,不允许分配给未声明的标识符以避免隐式全局变量。


简而言之:全局上下文**没有区别。

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

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


在浏览器的任何功能之外,使用var与不使用范围没有区别。在这两个例子中,globalVarwindow的成员。

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