我什么时候使用var?

时间:2011-06-09 22:29:15

标签: javascript var

  

可能重复:
  JavaScript Variable Scope

我的理解是,如果我在函数中使用var,那么我有一个局部变量。如果我没有delcare var,我现在有一个全局变量。

但是关于功能的oustide,var有什么影响呢?

6 个答案:

答案 0 :(得分:8)

首先,在函数之外使用代码通常是不好的做法。如果没有别的,请将代码包装在匿名函数中:

(function(){
    // code
})();

至于var有什么影响,它“声明”一个变量:

var foo;
alert(foo); // undefined;

VS

alert(foo); // error: foo is not defined

原因是上述代码在功能上与:

相同
alert(window.foo);

如果不使用var声明变量,则会出现查找错误,与尝试访问不存在的任何对象的属性相同。

请注意,var的一个奇怪之处是所有声明都被拉到了脚本的顶部,所以这也会起作用:

alert(foo); // undefined
var foo;

您还可以访问window对象中的变量(虽然您也可以通过设置不带var的变量来实现此目的,例如只需foo=42):

var foo;
for(var key in window){
   // one of these keys will be 'foo'
}

答案 1 :(得分:6)

总是使用var是一种好习惯。严格来说,当您已经处于全局范围内时,您不需要,但为了代码可维护性,您应该这样做。

说你有:

foo = 'bar';

但稍后您决定将此代码移动到函数中:

function doSomething() {
    foo = 'bar'; // oops forgot to add var 
}

如果您忘记添加var语句,那么您刚刚创建了一个隐式全局语句。现在,如果在全局范围内创建一个名为foo的新对象,它们将导致彼此冲突。

function doSomething() {
    foo = 'bar'; // Implicit global
}

foo = 'baz';
doSomething();
console.log(foo); // Returns 'bar', not 'baz'

当您忘记在var循环中对i之类的内容使用for时,此类错误尤其隐蔽。学习使用JSLint可以帮助避免这些以及其他有问题的逻辑或语法错误。

答案 2 :(得分:1)

您的问题已在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

中得到解答
  

在函数外使用var是   可选的;为...分配值   隐含的未声明的变量   将其声明为全局变量。   但是,建议始终使用   使用var,这是必要的   在以下情况下起作用:

     
      
  • 如果包含该函数的范围中的变量(包括全局范围)具有相同的名称。
  •   
  • 如果递归或多个函数使用具有相同名称和>的变量打算将这些变量置于本地。
  •   
     

未能声明变量   这些案件很有可能导致   意想不到的结果。

答案 3 :(得分:0)

我认为在函数外部使用var的工作原理与不使用var相同:你得到一个全局的。例外情况是,如果您在一个类或其他一些名称空间结构中,它仍将在该语言环境中定义一个变量

答案 4 :(得分:0)

我相信你想在初始化变量时创建一个var。正如我编写的那样,当我需要初始化变量时,我用var开始。如果声明一个没有单词var的变量,它总是全局的。如果在函数内声明一个带var的变量,那么它就是该函数的本地变量。如果使用var outside函数创建变量,它将是一个全局变量。

答案 5 :(得分:0)

如果要声明一个全局变量并设置一个值,它将没有任何实际价值,但如上所述,这是最佳实践。但是,如果要声明没有值的变量,则需要“var”。