作用域
作用域
作用域
变量或函数可以发生作用的区域即是作用域。作用域的用途就是隔离变量或函数,并控制变量或函数的生命周期,超过该区域的变量或函数就不能被访问。
全局作用域
1、在最外层定义的变量和函数拥有全局作用域。
例:
var n = 10;
function fun(){
var a = 1;
return a;
}
console.log(fun());
console.log(a);
console.log(n);
2、未定义直接赋值的变量自动声明为拥有全局作用域
var n = 10;
function fun(){
a = 1;
return a;
}
console.log(fun());
console.log(a);
console.log(n);
3、window对象的属性拥有全局作用
作用域链
当代码在一个环境中执行时,会创建变量对象的一个作用域链(作用域形成的链条)
1、作用域链的前端,始终都是当前执行的代码所在环境的变量对象
2、作用域链中的下一个对象来自于外部环境,而在下一个变量对象则来自下一个外部环境,一直到全局执行环境
3、全局执行环境的变量对象始终都是作用域链上的最后一个对象
内部环境可以通过作用域链访问所有外部环境,但外部环境不能访问内部环境的任何变量和函数。
function factory(){
var num = 1;
return function(){
console.log(num++);
}
}
var getNum = factory();
getNum();
getNum();
num = 1;
getNum();