Skip to content
大纲

闭包

js在执行上下文时,遇到函数执行,进入这个函数后,创建变量对象时,扫到内函数,如果这个内函数引用到了外层级的变量(非全局变量),浏览器会为这个内函数的作用域链上添加一个含这个变量的Closure作用域,这个作用域称之为闭包

console.dir(内函数),可在[[scopes]]内查看

闭包的特征

  1. 函数内包含一个函数,且内函数含引用了父层函数的变量(包括形参)
  2. 闭包不会随着父级作用域的结束而结束

闭包共性

多个内函数共用一个闭包

metetor经典闭包泄露问题

js
var t = null;
  var replaceThing = function() {
    var o = t
    var unused = function() {
        if (o) console.log("hi")
    }
    t = {
      longStr: new Array(1000000).join('*'),
      someMethod: function() {
        console.log(1)
      }
    }
  }
  setInterval(replaceThing, 1000)

谷歌旧版本heap会一直递增,新版已处理

Released under the MIT License.