闭包 (Closure) - 图1

1.概念

  1. 闭包 (Closure):函数和其周围的状态(词法环境)的引用捆绑在一起形成闭包。
  2. 可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员
  3. 延长了外部函数内部的做用范围
  4. 闭包的本质:
    1. 函数在执行的时候会放到一个执行栈上当函数执行完毕之后会从执行栈上移除,
    2. 但是堆上的作用域成员因为被外部引用不能释放,(注意这里可能会造成性能问题 如果这个闭包不用了 记着设置为NULL)
    3. 因此内部函数依然可以访问外部函数的成员

      2.案例

      1. // 生成计算数字的多少次幂的函数
      2. function makePower(power){
      3. return function(number){
      4. return Math.pow(number,power)
      5. }
      6. }
      7. let power2 = makePower(2);
      8. let power3 = makePower(3);
      9. console.log(power2(5));
      10. console.log(power3(5));
      ```javascript //工资+绩效计算 function makeSalary(base){ return function(performance){ return base + performance } }

let salaryLevel1 = makeSalary(12000); let salaryLevel2 = makeSalary(15000); console.log(salaryLevel1(2000),salaryLevel2(5000)); ```

3.闭包调试方式

  1. 进入开发者工具
  2. 进入Sources 中 我们编写的网页
  3. 在需要的位置打上断点
  4. 通过Call Stack(调用栈) 和 scope(作用域)
    1. 通过下一步(F11)和跳过(F10)可以观察到运行情况