SOURCE

var outerValue = '1111'
var later
function outerFunc(){
    var innerValue = '222'
    function innerFunc (){
        console.log(outerValue)
        console.log(innerValue)
    }
    later = innerFunc
}
console.log(innerValue)
outerFunc()
later()
//无论是作为返回值或者参数,还是直接在函数内部进行赋值,最根本的点在于有
//一个变量保持了对函数里面某个变量的引用,只要这个引用存在,对应的作用域
//就不会被销毁
//形式上,有访问到内部私有变量的效果
//为什么内部函数在作用域消失之后再执行内部函数,其变量依然存在?
//因为在预编译的过程中,在外部函数声明内部函数时,不仅定义了函数,还创建了一个闭包
//闭包中登记了函数的声明,还登记了函数声明时的变量
//在函数执行的时候,通过执行上下文可以找到对应的变量
console 命令行工具 X clear

                    
>
console