可能重复:
JavaScript 变量范围
我的理解是,如果我在函数中使用 var,那么我就有一个局部变量。如果我不 delcare var 我现在有一个全局变量。
但是 oustide of functions 呢, var 有什么作用呢?
可能重复:
JavaScript 变量范围
我的理解是,如果我在函数中使用 var,那么我就有一个局部变量。如果我不 delcare var 我现在有一个全局变量。
但是 oustide of functions 呢, var 有什么作用呢?
首先,在函数之外使用代码通常是不好的做法。如果不出意外,请将您的代码包装在匿名函数中:
(function(){
// code
})();
至于 var 有什么作用,它“声明”了一个变量:
var foo;
alert(foo); // undefined;
与:
alert(foo); // error: foo is not defined
原因是上面的代码在功能上等同于:
alert(window.foo);
如果不使用 声明变量var
,则会出现查找错误,这与尝试访问任何不存在的对象的属性相同。
请注意,其中一个奇怪的var
地方是所有声明都被拉到脚本的顶部,所以这也可以:
alert(foo); // undefined
var foo;
您还可以访问window
对象中的变量(尽管您也可以通过设置不带 var 的变量来获得此权限,例如 just 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
类似的东西时,这种错误尤其隐蔽。学习使用JSLint有助于避免这些和其他有问题的逻辑或语法错误。i
for
您的问题已在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var中得到解答
在函数外使用 var 是可选的;为未声明的变量赋值会隐式地将其声明为全局变量。但是,建议始终使用 var,并且在以下情况下必须在函数内使用:
- 如果包含函数的范围(包括全局范围)中的变量具有相同的名称。
- 如果递归或多个函数使用具有相同名称的变量并且 > 打算将这些变量设为本地。
在这些情况下未能声明变量很可能会导致意外结果。
如果您要声明一个全局变量并设置一个值,它将没有任何实际价值,但如前所述,这是最佳实践。但是,如果您想声明一个没有值的变量,则需要“var”。
我相信在函数之外使用 var 与不使用 var 一样:你得到一个全局变量。例外情况是,如果您在一个类或其他命名空间结构中,它仍将在该语言环境中定义一个变量
我相信您想在初始化变量时创建一个 var。正如我编码的那样,当我需要初始化一个变量时,我用 var 开始它。如果你声明一个不带 var 的变量,它总是全局的。如果你在函数内部用 var 声明一个变量,它是该函数的本地变量。如果您在函数外部使用 var 创建一个变量,它将是一个全局变量。