带有'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 上下文 中访问全局 variablesmethods。但是,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全局变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

带var和不带var的javascript变量之间的区别? [复制]

js 声明变量带var和不带的区别

js基础var

js添加var和不加var区别

加var和不加var的区别

js中加“var”和不加“var”的区别