JS var: 帮助我理解这个

12 浏览
0 Comments

JS var: 帮助我理解这个

我知道在函数中定义局部变量时应该始终使用\'var\'。\n当我定义一个全局函数时,使用\'var\'有什么区别?\n我在互联网上看到的一些代码示例使用\n

var globalVar = something;
globalVar = something;

\n有什么区别?

0
0 Comments

JS的全局上下文中没有任何区别。全局上下文的Variable object是全局上下文本身。这就是为什么我们可以在函数或eval上下文中访问全局变量和方法。然而,var语句只是确保在当前上下文中定义一个变量,所以在全局上下文中省略var没有任何区别。例外情况是,ES5严格模式可能会在看到没有var声明的变量时抛出错误。

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

alert(globalVar); globalVar = something;将由于JS编译var的方式而引发错误。在第二行之前添加var,你只会得到"undefined"。

是的,但我的答案仍然是正确的。var关键字将在解析时,在当前上下文中神奇地声明一个变量,而不需要任何定义。

不,答案"没有区别"是不正确的,这基本上是你原始答案中所说的一切:)

我添加了细则:p

那个细则确实太大了。我想你应该使用

解决方法:

在全局上下文中,可以省略var关键字来声明变量,因为全局上下文的Variable object就是全局上下文本身。如果在ES5严格模式下省略var关键字,则可能会抛出错误。

0
0 Comments

问题的出现原因是,在JS中,简单的赋值语句globalVar = 'something';并不会声明一个变量,它只会在全局对象上创建一个属性,而全局对象是作用域链中的最后一个对象,所以这个属性是可解析的。另一个区别是变量绑定的方式,变量被绑定为其环境记录的"non-deletable"属性。

解决方法是始终使用var语句来声明变量,因为在ECMAScript 5 Strict Mode中,对未声明的标识符进行赋值是不允许的,以避免隐式全局变量的产生。

0