1 回答

TA貢獻361條經驗 獲得超191個贊
var a = fun(0); ?a.fun(1); ?a.fun(2); ?a.fun(3);
1、fun(0)時,第一個參數n為0,第二個參數o未設置,console.log(o)為undefined,return值為:
?{ ????fun:function(m){ ??????return?fun(m,n);???//n為0 ????}
2、a.fun(1);m=1,代入上方return,得出新的return值為fun(1,0),執行得出console.log(0),return值為:
?//fun(1,0)return值為: ?{ ????fun:function(m){????? ??????return?fun(m,n);???//n為0 ????}
3、a.fun(2);m=2,代入上方return,得出新的return值為fun(2,0),執行得出console.log(0),return值為:
?//fun(2,0)return值為: ?{ ????fun:function(m){????? ??????return?fun(m,n);???//n為0 ????}
4、a.fun(3);m=3,代入上方return,得出新的return值為fun(3,0),執行得出console.log(0)
var b = fun(0).fun(1).fun(2).fun(3);
當執行到fun(0)時,與前面a一樣,第二個參數未設置,console.log(o)為undefined;return值為:
?{ ????fun:function(m){ ??????return?fun(m,n);???//n為0 ????}
當執行到fun(0).fun(1)時,m為1,代入上方return,得出新的return值為fun(1,0),執行fun(1,0),console.log(0),return值為:
???//fun(1,0)的return值為: ???{ ????fun:function(m){ ??????return?fun(m,n);??//n為1 ????}
當執行到fun(0).fun(1).fun(2)時,m為2,代入上方return,得出新的return值為fun(2,1),執行fun(2,1),console.log(1),return值為:
???//fun(2,1)的return值為: ???{ ????fun:function(m){ ??????return?fun(m,n);??//n為2 ????}
當執行到fun(0).fun(1).fun(2).fun(3)時,m為3,代入上方return,得出新的return值為fun(3,2),執行fun(3,2),console.log(2);
var c = fun(0).fun(1); ?c.fun(2); ?c.fun(3);
當fun(0)時,與前面b一致,undefined;
當fun(0).fun(1)時,與前面b一致,console.log(0);
c=fun(0).fun(1);return為:
???{ ????fun:function(m){ ??????return?fun(m,n);??//n為1 ????}
因此c.fun(2)就是fun(0).fun(1).fun(2),與前面b一致,console.log(1);
因此c.fun(3)就是fun(0).fun(1).fun(3),m=3,代入上方return,得出新的retrun:fun(3,1);
得出結果console.log(1)
添加回答
舉報