1.var与不加var的区别
区别一
局部变量和全局变量
var a = 1;
function f (){
var b = 2;
}
在这段代码中,用var定义了函数内部的变量b,b就是一个局部变量,在函数外使用会报错。 如果换成下面的写法:
var a = 1;
function f (){
b = 2;
}
这样b没有用var定义,相当于是一个全局变量。在函数f被调用之后,就能使用变量b了。
区别二
可删除和不可删除
不加var的变量,能够被删除掉(delete),加var的变量不能删除。本质上,不加var的变量,是作为window对象的一个属性存在的,所以delete可以删除一个属性。
区别三
加var会提升,不加var不被提升。
2.变量的作用域
全局作用域
<script>
var a = 1; //全局变量
function f () {
console.log(a);
}
f(); //可以使用a
</script>
<script>
function f1 () {
console.log(a);
}
f1();//还可以使用a
</script>
局部作用域
<script>
function f () {
var a = 1;
console.log(a);
}
f();
console.log(a);// 出错
</script>
使用变量的就近原则
函数内部var会被"提升"
<script>
var a=1;
function f(){
console.info(a);
var a=2;
console.info(a);
}
f();
console.info(a);
</script>
相当于
<script>
var a=1;// 全局变量a=1
function f(){
var a
console.info(a);
a=2;// 局部变量a=2
console.info(a); // 使用局部变量 a=2
}
f();
console.info(a);// 使用全局变量 a=1
</script>
在函数的内部使用变量,如果有一个与全局变量同名的局部变量,以局部变量为准。
如何确定函数内部变量的值:如果当前函数内部没有定义局部变量,就区定义这个函数的那个作用域中去找。
3.推荐变量的使用方式
在思想上,避免使用全局变量。
在行动上,变量的定义要出现在代码段的开头。