JS闭包

39 阅读1分钟

闭包是 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已死