直接上题:
function fun(n,o){
console.log(o);
return{
fun:function(m){ //闭包
return fun(m,n);
}
}
}
// 先执行闭包
// 一 ===================================================
var a = fun(0);//fun(m,0) ==>fun(1,o)
a.fun(1); //fun(1,0) ==> fun(1,0)
a.fun(2); //fun(2,0) ==> fun(2,0)
a.fun(3); //fun(3,0) ==> fun(3,0)
// 答案:o=undefind,0,0,0
// 二================================================
var b = fun(0).fun(1).fun(2).fun(3)
// 分析 b=fun(0).fun(1) ==> fun(1,0) ==>(1,0)
// b=fun(0).fun(1).fun(2) ==> fun(2,1) ==> fun(2,1)
// b=fun(0).fun(1).fun(2).fun(3) ==> fun(3,2) ==> fun(3,2)
// 答案:o=undefind,0,1,2
// 三===============================================
var c = fun(0).fun(1); //fun(1,0) ==> fun(1,0);
c.fun(2); //fun(2,1) ==> fun(2,1);
c.fun(3); //fun(3,1) ==> fun(3,1);
// 答案:o=undefind,0,1,1
闭包:让外层函数变量持久保存,模拟全局变量;
闭包指的是定义在一个函数内部的函数,并且被函数外部所引用,让变量持久保存,模拟全局变量