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 variables和methods。但是,var语句只是确保您在当前上下文中定义了一个变量,因此在全局上下文中省略该变量没有任何区别。例外:ES5严格模式在看到没有var的声明时可能会抛出错误。
**唯一的区别是,var将在当前(执行)上下文中声明一个没有定义的变量。这发生在JS解析时,因此引擎知道上下文中有一个具有该名称的变量。省略var将导致直接从global object访问属性。
- 不完全正确:由于JS编译var的方式,alert(globalVar); globalVar = something;将抛出一个错误。在第2行之前添加var将得到"未定义"
- @是的,但我的回答仍然是正确的。在解析时,var关键字只能神奇地将当前上下文中的变量declare转换为一个变量,而没有任何定义。
- 不,答案"没有区别"是不正确的,基本上都是你原来的答案说的:)
- @我加了一个细印:p
- 那张照片真的太大了。我想你需要。
- @帕特里克德夫:真的!
- 大大改善了。o)
- 谢谢,真漂亮!
在浏览器的任何功能之外,使用var与不使用范围没有区别。在这两个例子中,globalVar是window的成员。
通常,最好不要使用这些类型的变量,这样全局命名空间就不会变得杂乱无章。