注意:这个问题是从ECMAScript版本3或5的角度提出的。随着ECMAScript 6版本中新特性的引入,答案可能会过时。

JavaScript中var关键字的功能是什么

var someNumber = 2;
var someFunction = function() { doSomething; }
var someObject = { }
var someObject.someProperty = 5;

and

someNumber = 2;
someFunction = function() { doSomething; }
someObject = { }
someObject.someProperty = 5;

?

你什么时候会使用其中一个,为什么/做什么?


当前回答

不使用“var”变量只能在设置值时定义。例如:

my_var;

不能在全局范围或任何其他范围内工作。它应该具有如下值:

my_var = "value";

另一方面,你可以定义一个可用的类;

var my_var;

它的值未定义(有趣的是,它的值不为null,也不等于null)。

其他回答

没有var-全局变量。

强烈建议始终使用var语句,因为本地上下文中的init全局变量是有害的。但,若你们需要这个肮脏的伎俩,你们应该在页面的开头写下评论:

/* global: varname1, varname2... */

当在浏览器中执行Javascript时,所有代码都被一个with语句包围,如下所示:

with (window) {
    //Your code
}

有关-MDN的更多信息

由于var在当前范围内声明了一个变量,所以在窗口内声明var和根本不声明它之间没有区别。

不同的是,当你不直接在窗口内时,例如在函数内或块内。

使用var可以隐藏同名的外部变量。通过这种方式,您可以模拟“私有”变量,但这是另一个主题。

经验法则是始终使用var,否则会有引入细微错误的风险。

编辑:在收到批评之后,我想强调以下几点:

var声明当前范围中的变量全局范围是窗口不使用var在全局范围(窗口)中隐式声明var使用var在全局范围(窗口)中声明变量与省略变量相同。使用var在不同于window的作用域中声明变量与不使用var声明变量不同始终显式声明var,因为这是一种很好的做法

始终使用var关键字声明变量。为什么?良好的编码实践本身应该是足够的理由,但省略它意味着它是在全局范围内声明的(像这样的变量称为“隐含的”全局变量)。Douglas Crockford建议不要使用隐含的全局变量,并且根据Apple JavaScript编码指南:

在没有变量的情况下创建的任何变量关键字是在全局范围内创建的并且当函数返回(因为它没有超出范围),呈现内存泄漏的机会。

除非您希望将变量附加到浏览器中的窗口对象,否则应该使用var关键字。这里有一个链接,用和wihtout var关键字解释全局作用域和本地作用域之间的区别。

当在不使用var关键字的情况下定义变量时,它看起来像是一个简单的“赋值”操作。

当将值分配给javascript中的变量时,解释器首先尝试在与赋值相同的上下文/范围中查找“变量声明”。当解释器执行dummyVariable=20时,它会在函数开头查找dummyVariable的声明。(因为javascript解释器将所有变量声明移动到上下文的开头,这称为提升)

您可能还想看看javascript中的提升

另一个区别例如

var a = a || [] ; // works 

虽然

a = a || [] ; // a is undefined error.