SOURCE

// 闭包就是内部函数能够读取外部函数中声明的所有变量的函数
// 内部函数作为外部函数的返回值返回
// 好处
//      可以读取函数内部的变量
//      将变量始终保持在内存中  obj没有被回收一直在占内存中
//      可以封装对象的私有属性和私有方法
// 坏处
//      比较耗费内存、使用不当会造成内存溢出的问题
// 具体应用实例 参考   https://www.jb51.net/article/203104.htm

var a = function () {
    const obj = {
        a: '小李',
        b: '小胡'
    }
    function b() {
        console.log(obj)
        return obj
    }
    return b
}
const func = a() //得到a函数内部返回的函数b
func() //调用函数

//console.log(obj) //  Uncaught ReferenceError: obj is not defined

function fn() {
    var name = "hello";
    return function callback() {
        return name;
    }
}
var fn1 = fn()//执行函数将返回值(callback函数)赋值给fn1,

function fn2(f) {
    //将函数作为参数传入
    console.log(f());//执行函数,并输出
}
fn2(fn1)//执行输出fn2

// 每秒执行1次,分别输出1-10
// for(var i=1;i<=10;i++){
//     (function(j){
//         //j来接收
//         setTimeout(function(){
//             console.log(j);
//         },j*1000);
//     })(i)//i作为实参传入
// }

for(var i=1;i<=10;i++){
    var func1 = function(j){
        return setTimeout(function(){
            console.log(j);
        },j*1000);
    }
    func1(i)
}
console 命令行工具 X clear

                    
>
console