函数式编程 -- 闭包

闭包

  • 闭包:延长函数内部属性的作用域范围

  • 本质:函数在执行的时候会放到一个执行栈上,当函数执行完毕后,会从执行栈上移除,但是堆上的作用域成员因为被外部引用而不能释放,因此内部函数依然可以访问函数的成员

// once函数中使用到闭包
function once(fn){
    let done = false
    // 外部函数once返回了一个内部函数,内部函数对外部函数的成员done进行了引用,此时就形成了闭包,外部函数的成员在函数执行完成后不会被释放
    return function(){
        if(!done){
            done = true
            return fn.apply(this,arguments)
        }
    }
}
let pay=once(function(money){
    console.log("支付:" + money + "RMB"
})

pay(5)
pay(5)

// 输出
// 支付:5RMB
原文地址:https://www.cnblogs.com/MissSage/p/14875771.html