带有'var'和不带'var'的javascript全局变量[重复]
Posted
技术标签:
【中文标题】带有\'var\'和不带\'var\'的javascript全局变量[重复]【英文标题】:javascript global variable with 'var' and without 'var' [duplicate]带有'var'和不带'var'的javascript全局变量[重复] 【发布时间】:2011-10-17 14:59:53 【问题描述】:可能重复:Difference between using var and not using var in javascript
我知道我应该始终使用 'var' 在函数中定义局部变量。
当我定义一个全局函数时,使用 'var' 有什么区别?
我在网上看到的一些代码示例
var globalVar = something;
globalVar = something;
有什么区别?
【问题讨论】:
这不是重复的。这个问题具体是在全球范围内。我首先找到了“欺骗问题”,它没有回答我的问题,然后我找到了这个问题,我的问题得到了回答。 【参考方案1】:嗯,不同之处在于技术上,像globalVar = 'something';
这样的简单赋值不会声明变量,该赋值只会创建一个属性 在全局对象上,并且全局对象是作用域链中的最后一个对象这一事实使其可解析。
另一个区别是绑定的方式,变量被绑定为其环境记录的“不可删除”属性,例如:
var global1 = 'foo';
delete this.global1; // false
global2 = 'bar';
delete this.global2; // true
我强烈建议您始终使用 var
语句,例如,您的代码将在 ECMAScript 5 严格模式下中断,不允许分配给未声明的标识符以避免隐式全局。
【讨论】:
【参考方案2】:简短:在全局上下文中没有区别**。
Long:全局上下文的变量对象就是全局上下文本身。这就是为什么我们可以在 function- 或 eval 上下文 中访问全局 variables
和 methods
。但是,var
语句只是确保您在当前上下文中定义了一个变量,因此在全局上下文中省略它并没有什么区别。 异常:ES5严格模式在看到没有var
的声明时可能会抛出错误。
**
唯一的区别是,var
将在当前(执行)上下文中声明一个没有定义的变量。这发生在 js 解析时,因此引擎知道上下文中有一个具有该名称的变量可用。省略 var
最终会导致来自 global object
的直接属性访问。
【讨论】:
不完全正确:alert(globalVar); globalVar = something;
会由于 JS 编译 var 的方式而引发错误。在第二行之前添加var
,你会得到“未定义”
@cwolves:是的,但我的回答仍然正确。 var
关键字将神奇地 declare
解析时当前上下文中的变量,没有任何定义。
不,“没有区别”的答案是不正确的,这基本上是你原来的答案所说的:)
@cwolves:我添加了细则:p
那个字实在是太大了。我想你需要<sub><sup>
。以上是关于带有'var'和不带'var'的javascript全局变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章