带有"var"且没有"var"的javascript全局变量

Moo*_*oon 12 javascript var global

可能重复:
使用var和不使用JavaScript中的var之间的区别

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

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

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

var globalVar = something;
globalVar = something;
Run Code Online (Sandbox Code Playgroud)

有什么不同?

CMS*_*CMS 22

好吧,区别在于技术上,一个简单的赋值,因为globalVar = 'something';它没有声明一个变量,该赋值只会在全局对象上创建一个属性,而全局对象是作用域链中的最后一个对象,这使得它可以解析.

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

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

global2 = 'bar';
delete this.global2; // true
Run Code Online (Sandbox Code Playgroud)

我强烈建议您始终使用该var语句,例如,您的代码将在ECMAScript 5严格模式下中断,不允许对未声明的标识符进行赋值以避免隐式全局变量.


jAn*_*ndy 6

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

长:该变量对象全球范围内为全球范围内的本身.这就是为什么我们可以直接访问全局variablesmethods一个内部功能-或者EVAL背景.但是,该var语句只是确保您在当前上下文中定义变量,因此在全局上下文中省略该变量没有任何区别.例外:ES5严格模式在看到没有声明时可能会抛出错误var.


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