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 */