作用域概念
- 作用域针对变量,变量和函数只能在一定范围内使用。
区分
- 全局作用域、函数(局部)作用域
var a = '11';
function scope() {
var b = '22';
function scopeChild() {
var c = '33';
d = '44';
}
}
- 全局作用域 window ,变量 a 属于全局变量,可以在任何地方访问
- 函数作用域,例如 c 只能在 scopeChild 函数内访问,为局部变量。
- d 变量由于未声明,属于全局变量。
作用
- 程序安全,避免变量全局污染。
- 内存释放
作用域链
- 变量只能向上访问,不能向下访问。 例:a,b ,c 可以在函数 scopeChild 内访问,a,b 可以在 scope 函数访问。
- 变量使用遵循就近原则。函数内直接使用,如果没有则向上查找,查找过程形成的链条称为作用域链。第一个对象是当前变量所处的作用域,变量访问到 window 即终止。
- 作用:保证有权访问的变量和函数是有序的。
例1
var a = 'aa';
function test() {
alert(a); // aa 全局变量,局部未定义声明,向上查找,找到即终止
a = 'bb';
}
test();
alert(a); // bb 改变全局变量
例2
var a = 'aa';
function test() {
alert(a); //undefined 变量提升,相当于 var a;再 alert(a)
var a = 'bb';
alert(a); // bb 局部变量
}
test();
alert(a); // aa 全局变量
例3
function test() {
b(); //函数声明提升
var a = 1;
function b() {
console.log(1); // 1
console.log(a); //变量声明定义 undefined
var a = 2;
}
}