作用域

作用域

作用域

变量或函数可以发生作用的区域即是作用域。作用域的用途就是隔离变量或函数,并控制变量或函数的生命周期,超过该区域的变量或函数就不能被访问。

全局作用域

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();
作用域