Skip to content

作用域与闭包

作用域

作用域是根据名称查找变量的一套规则

  • 全局作用域:任何地方都能访问到的就是全局作用域

  • 函数作用域(局部作用域):在固定的代码片段内可访问到,一般是指函数里声明的

  • 块级作用域:只在变量声明的代码块内有效(let、const)

    作用域链:执行函数时先从函数内部寻找局部变量, 没找到就往上个作用域寻找,直到全局作用域为止,这个作用域之间行程的引用关系就是作用域链

闭包

闭包是指有权访问另一个函数作用域中的变量的函数

  • 作用:延长作用域链
  • 优点:
    • 避免全局变量污染
    • 私有化变量
  • 缺点:
    • 内存消耗大
    • 容易造成内存泄露
javascript
function foo() {
  var a = 1;
  return function () {
    a++;
    console.log(a);
  };
}
var boo = foo();

boo = null; //销毁闭包解决内存泄露

基于 MIT 许可发布