var定义的变量只有全局作用域和函数作用域,没有块作用域。
在函数内定义的变量属于函数作用域,其余的都是全局作用域。
使用var定义的变量在定义前也可以被访问到,值为undfiend,这种现象叫变量提升。
var a = 1;//定义在函数外,属于全局作用域,全局可以访问
function f()
{
console.log(b);//变量提升,输出undefined
if(a == 1)//在函数内可以直接访问全局作用域的变量
{
var b = 2;//定义在函数内的块中,属于函数作用域,仅在函数中可以访问
}
console.log(b);//可以访问到b,输出2
}
f();
console.log(b);//无法访问到函数作用域内的b
使用var可以在相同的作用域重复定义相同的变量,不会报错:
var a = 1;
var a = "hello";
console.log(a);//输出hello
使用var在函数内定义的变量,若与全局作用域的变量名相同,会在函数范围内屏蔽全局变量的可见性:
var a = 1;
function f()
{
var a = "hello";//在函数作用域内定义的a,会屏蔽全局作用域内a的可见性,对a的访问只影响函数作用域内的a
console.log(a);//输出函数作用域内的a,hello
}