var用于声明一个变量,并且具有以下特性:
1.变量可以重复声明
function a() {
var b = 10;
var b = 20;
var b = 30;
console.log(b);
}
a(); // 30
2.var声明作用域
使用 var定义的变量会成为包含它的函数的局部变量
function a(){
b= "hello";
}
a();
console.log(b); //hello
//当b用var声明后
function a(){
var b= "hello";
}
a();
console.log(b); //b is not defined
//使用 var在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁
3.变量声明会提前
function a() {
console.log(b);
var b = 1;
}
a(); // undefined
//之所以不会报错,是因为运行的时候把它看成等价于下面的代码:
function a() {
var b;
console.log(b);
b = 1;
}
a(); // undefined
这就是“提升”,也就是把所有变量声明都拉到函数作用域的顶部。这样的“提升”有的时候会给我们带来一些影响,比如下面这种情况:
a =1
function f(){
console.log(a);
if(false){
var a = 2;
}
}
f(); // undefined
//本来应该输出1,但var声明提前导致出现下面这种情况,内层的变量影响了外层的变量。
a =1
function f(){
var a
console.log(a);
if(false){
a = 2;
}
}
f(); // undefined