作用域:变量在某个范围内起作用和效果,分为全局作用域(script内部),和局部作用域(函数内部)
作用:提升程序可靠性,减少命名冲突
1、全局变量:全局作用域下的变量,在全局下都可以使用,在浏览器关闭时才会销毁,比较占资源
注意:函数内部没有申明,直接赋值的变量,也属于全局变量(不规范,不推介使用)
案例:
function aaa(){
a=10; }//没有用var定义变量,默认为全局变量
aaa();
alert(a); //10
function aaa(){
a=b=10;
}
aaa();
alert(a);//10
alert(b)//10
2、局部变量:函数内部的变量,只能在函数内部使用,执行完毕就会销毁,比较节约资源
注意:函数的形参也是局部边变量
3、注意事项:
(1)函数内部可以访问外部的全局变量,但外部的全局变量不能访问函数内部的局部变量
案例:
var a=10;//全局变量
function aaa(){
alert(a);// 函数内部可以访问外部的全局变量
};
aaa();//10
function aaa(){
var a=10;
};局部变量,在函数运行结束后已销毁
aaa();
alert(a)// a is not defined
var a=10; //全局变量
function aaa(){
alert(a);
};
function bbb(){var a=20;//局部变量
var a=10; //全局变量
function aaa(){
alert(a);
};
function bbb(){
var a=20;//局部变量
aaa();
}
bbb();//10
(2)变量的查找是就近原则去寻找,定义的var变量;内部访问外部变量时,采用就近查找原则
(3)变量的声明被提前到作用域顶部,赋值保留在原地
a/变量域解析(变量提升):所有变量的申明提升到当前作用域的最前面,不提升赋值
b/函数域解析(函数提升):所有函数的申明提升到当前作用域的最前面,不调用函数
案例:
function aaa(){
alert(a);//变量a的赋值保留在原地 undefined
var a=20;
}
aaa();
var a=10;
function aaa(){
alert(a);// undefined
var a=20;
}
aaa()
var a=10;
function aaa(a){
alert(a);//形参a为局部变量
var a=20 }
aaa(a);//10