编辑代码

// 一般来说是一个函数包含另一个函数,并且另一个函数使用到了外层函数中的变量。
// 此时就形成了闭包,外层函数的变量是常驻在内存里的。
// 因为在函数执行的时候就形成了一个执行环境以及对应的作用域链,
// 一般来讲,函数执行完,局部活动对象就会被销毁,内存中仅保存全局作用域。

function out() {
    let outNum = 1 //可以在 bibao 中调用,形成了闭包
    return function () {
        return 1 + outNum
    }
}

let bibao = out()

// 闭包只能取得任何变量的最后一个值。这也是循环中容易引发的变量不对的问题