JS闭包

86 阅读1分钟

什么是闭包

在一个函数内部声明函数,内部函数引用外部函数的变量,就称为闭包。

function fn(){
    let x = 'hi';
    say(){
        console.log(x)
    }
}

但是如果不将内部函数返回是没有意义的

function fn(){
    let x = 'hi';
    say(){
        console.log(x)
    }
    return say
}

隐藏局部变量,暴露操作函数。

const createAdd = ()=>{
    let n = 0
    return ()=>{
        n += 1
        console.log(n)
    }
}

const add = createAdd()
add() // 1
add() // 2

闭包的用途

  1. 外部作用域获取函数作用域内的变量
  2. 封装私有属性
  3. 防止变量污染全局
  4. 迭代器

闭包的缺点

缺点,容易内存泄露。注意,虽然闭包并不会造成内存泄露,真实原因是 JS 引擎的实现有问题。