闭包是 js 的一种语法特性
闭包 = 函数 + 自由变量
//例子
{
let count
function add () {
count += 1
}
}
// 一般用法
const num = function () {
let count = 3
return () => count += 1
}()
num() // count = 4
作用
- 提供对局部变量的间接访问
- 避免污染全局环境(废话)
- 维持变量,使其不被垃圾回收(废话)
优点
- 简单,好用
缺点
- 闭包 使用不当 可能造成内存泄漏(重点是使用不当,不是闭包)
举例说明
function test() {
let x = {name:'john'}
let y = {name:'sam',content:'--很长字符串--'}
return function fn (){
return x
}
}
const myFn = test()
const myX = myFn() // y 会被回收么?
对于一个正常浏览器来说,y会在一段时间后被回收(浏览器垃圾回收不是实时的)。
但旧版的IE并不会。(现在这个不用考虑 IE已死 )