闭包
js在执行上下文时,遇到函数执行,进入这个函数后,创建变量对象时,扫到内函数,如果这个内函数引用到了外层级的变量(非全局变量),浏览器会为这个内函数的作用域链上添加一个含这个变量的Closure作用域,这个作用域称之为闭包
console.dir(内函数),可在[[scopes]]内查看
闭包的特征
- 函数内包含一个函数,且内函数含引用了父层函数的变量(包括形参)
- 闭包不会随着父级作用域的结束而结束
闭包共性
多个内函数共用一个闭包
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会一直递增,新版已处理
JStar