作用域与闭包
作用域
作用域是根据名称查找变量的一套规则
全局作用域:任何地方都能访问到的就是全局作用域
函数作用域(局部作用域):在固定的代码片段内可访问到,一般是指函数里声明的
块级作用域:只在变量声明的代码块内有效(let、const)
作用域链:执行函数时先从函数内部寻找局部变量, 没找到就往上个作用域寻找,直到全局作用域为止,这个作用域之间行程的引用关系就是作用域链
闭包
闭包是指有权访问另一个函数作用域中的变量的函数
- 作用:延长作用域链
- 优点:
- 避免全局变量污染
- 私有化变量
- 缺点:
- 内存消耗大
- 容易造成内存泄露
javascript
function foo() {
var a = 1;
return function () {
a++;
console.log(a);
};
}
var boo = foo();
boo = null; //销毁闭包解决内存泄露