我什么时候使用var?

可能重复:
JavaScript变量范围

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

但是函数的尾巴呢,var有什么作用?


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

(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'
}

总是使用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对像ifor循环。 学习使用JSLint可以帮助避免这些和其他有问题的逻辑或语法错误。


您的问题在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var中得到解答

在函数外部使用var是可选的; 为未声明的变量赋值会隐式声明它为全局变量。 但是,建议始终使用var,并且在以下情况下在函数中必须使用var:

  • 如果包含该函数的作用域(包括全局作用域)中的变量具有相同的名称。
  • 如果递归或多个函数使用具有相同名称的变量并>打算将这些变量设为本地。
  • 在这些情况下未能声明变量很可能会导致意想不到的结果。

    链接地址: http://www.djcxy.com/p/40819.html

    上一篇: When do I use var?

    下一篇: How to get variables from the outside, inside a function in jQuery?