11 javascript var
可能重复:
JavaScript变量范围
我理解它在函数中如果我使用var然后我有一个局部变量.如果我不delcare var我现在有一个全局变量.
但是功能的oustide,var有什么影响呢?
首先,在函数之外使用代码通常是不好的做法.如果没有别的,请将您的代码包装在匿名函数中:
(function(){
// code
})();
Run Code Online (Sandbox Code Playgroud)
至于var有什么影响,它"声明"一个变量:
var foo;
alert(foo); // undefined;
Run Code Online (Sandbox Code Playgroud)
VS:
alert(foo); // error: foo is not defined
Run Code Online (Sandbox Code Playgroud)
原因是上面的代码在功能上与:
alert(window.foo);
Run Code Online (Sandbox Code Playgroud)
如果没有声明变量var,则会出现查找错误,与尝试访问不存在的任何对象的属性相同.
请注意,其中一个奇怪的var是所有声明都被拉到脚本的顶部,所以这也会起作用:
alert(foo); // undefined
var foo;
Run Code Online (Sandbox Code Playgroud)
您还可以访问window对象中的变量(尽管您也可以通过设置变量而不使用var,例如foo=42):
var foo;
for(var key in window){
// one of these keys will be 'foo'
}
Run Code Online (Sandbox Code Playgroud)
始终使用是一种好习惯var.严格来说,当您已经处于全局范围内时,您不需要,但为了代码可维护性,您应该这样做.
说你有:
foo = 'bar';
Run Code Online (Sandbox Code Playgroud)
但是稍后您决定要将此代码移动到函数中:
function doSomething() {
foo = 'bar'; // oops forgot to add var
}
Run Code Online (Sandbox Code Playgroud)
如果您忘记添加var语句,那么您刚刚创建了一个隐式全局语句.现在,如果在命名的全局范围中创建新对象,foo则会导致彼此冲突.
function doSomething() {
foo = 'bar'; // Implicit global
}
foo = 'baz';
doSomething();
console.log(foo); // Returns 'bar', not 'baz'
Run Code Online (Sandbox Code Playgroud)
当你忘记在循环中使用var某种东西时,这种错误尤其隐蔽.学习使用JSLint可以帮助避免这些和其他有问题的逻辑或语法错误.ifor
| 归档时间: |
|
| 查看次数: |
978 次 |
| 最近记录: |