function fun(n,o){
console.log(o);
return {
fun:function(m){
return fun(m,n);
}
}
}
var a = fun(0).fun(1);
a.fun(2);
a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0);
c.fun(1);
c.fun(2);
c.fun(3);
答案是:
undefined 0 1 1
undefined 0 1 2
undefined 0 0 0
解析:这个类似于闭包和传参的问题,先看var a = fun(0).fun(1)
这个是先调用了fun(0),可以理解为先整个大的fun函数先传一个0,那么0对应n,此时因为o没有传参数,所以console.log(o),此时的o是undefined
fun(0).fun(1)是调用return里面的fun函数,传入1,1对应m,最终返回了fun(1,0),此时又调用了大的fun函数,fun(1,0),console.log(o),此时的o是0,输出0
a.fun(2)相当于fun(1,0).fun(2),三个参数齐全,返回的函数是fun(2,1),n=2,o=1,console.log(o)是1
a.fun(3)同上,返回函数为fun(3,1),n=3,o=1,console.log(o)是1
其余答案类似。