我的理解是,如果我在函数中使用var,那么我有一个局部变量。如果我没有delcare var,我现在有一个全局变量。
但是关于功能的oustide,var有什么影响呢?
答案 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”。