function fun(n,o){
console.log(o);
return{
fun:function(m){
return fun(m,n);
}
}
}
var a = fun(0);
a.fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);
c.fun(2);
c.fun(3);
// function fun(n,o){
// console.log(o);
// return{
// fun1:function(m){
// return fun(m,n);
// }
// }
// }
// var a = fun(0);
// a.fun1(1);
// a.fun1(2);
// a.fun1(3);
// var b = fun(0).fun1(1).fun1(2).fun1(3);
// var c = fun(0).fun1(1);
// c.fun1(2);
// c.fun1(3);
// var a = fun(0);执行结果:a是个方法fun1,不执行fun1内的方法体。 此时n=0,o=undefined 然后fun1(1), 打印o=undefined
// 执行a.fun1(1) 会具体执行fun1()的方法体。 此时n=0,o=undefined fun(1,0) 打印o=0
// 执行a.fun1(2) 会具体执行fun1()的方法体。 此时n=0,o=undefined fun(2,0) 打印o=0
// 执行a.fun1(3) 会具体执行fun1()的方法体。 此时n=0,o=undefined fun(3,0) 打印o=0
// var c = fun(0).fun1(1)
// 执行fun(0).fun1(1)
// 首先执行fun(0)返回方法fun1,在执行.fun1(1) 会执行方法体 fun(1,0) 打印o=0
// 此时才将结果赋给c 此时n=1,o=0
// 然后执行 c.fun1(2); 执行fun(0).fun1(1)结束时,n=1,所以执行fun(2,1) 打印o=1
// 在执行 c.fun1(3); 此时n的值还是执行完fun(0).fun1(1)结束时的值,n=1,所以执行fun(3,1) 打印o=1
// 再说b
// 先执行fun(0), 结果还是返回方法体,返回的方法体执行fun1(1),再拿执行fun1(1)的结果执行fun1(2),
// 最后那fun1(2)的结果执行fun1(3)
每日一题1025之JavaScript闭包
最新推荐文章于 2020-09-03 10:59:17 发布