1 function fun(n,o){
2 console.log(o);
3 return{
4 fun:function(m){
5 return fun(m,n);
6 }
7 };
8
9 }
10
11
12 var a=fun(0);
13
14 a; //输出undefined Object { fun=function()}
15 a.fun(1); //输出undefined 0 Object { fun=function()}
16 a.fun(2); //输出undefined 0 Object { fun=function()}
17 a.fun(3); //输出undefined 0 Object { fun=function()}
18
19 var b=fun(0).fun(1).fun(2).fun(3);
20 //输出undefined 0 1 2 Object { fun=function()}
21
22
23 var c=fun(0).fun(1);
24 c.fun(2);//输出undefined 0 1 Object { fun=function()}
25 c.fun(3);//输出undefined 0 1 Object { fun=function()}
26
27
28 /*
29 简要:
30 第一次调用fun(0)时,n=0,o未定义,输出undefined(并返回对象 fun=function)
31
32 当重调用函数内对象时,如fun(0).fun(1)时,最开始n=0,o未定义,输出undefined后
33 调用属性fun,参数m=1,此时n=0,m=1;返回fun(1,0),fun(1,0)则将n替代为1,o替代为0,
34 直接输出0,最后返回函数fun=function
35
36 当再次调用内部fun()时,又一轮替换,如fun(0).fun(1).fun(2),依次输出undefined 0 ,1 object
37
38
39 */