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(2)
5.变量会沿着作用域链由内而外的进行查找,所以内部是可以访问到外部的变量的,但是外部不能访问内部的变量,所以在函数A的内部定义一个函数B,外部调用这个内部的函数B来访问A的变量的目的,这个就是闭包的定义