一道面试题目(考察闭包的变量提升)

70 阅读1分钟
        var a=0;
        var b=0;
        var c=0; 
        function fn(a){   
            console.log(a++,c)
           function fn2(b){  
                console.log(a,b,c)
            };
            var c=4;
            fn=fn2
        }
        fn(1)
        fn(2)
        
        这个题目考察的点:
        1.var的变量提升 在函数fn内部 var会有一个提升 所以console.log(a++,c)会输出 1,undefined。
        2.定义在函数外部的变量是全局变量,不会被销毁,定义在函数内部的变量是局部变量,函数执行完成之后会被销毁。
        3.分清楚函数的定义和函数的执行
        4.fn2的引用赋值给了fn,下次fn(2)执行的时候相当于执行了fn2(25.变量会沿着作用域链由内而外的进行查找,所以内部是可以访问到外部的变量的,但是外部不能访问内部的变量,所以在函数A的内部定义一个函数B,外部调用这个内部的函数B来访问A的变量的目的,这个就是闭包的定义