猿问

闭包 运行结果,麻烦给出详解,谢谢!

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);

//答案为

//a: undefined,0,0,0
//b: undefined,0,1,2
//c: undefined,0,1,1

qq_ontomorrow_03681282
浏览 2014回答 1
1回答

stone310

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)
随时随地看视频慕课网APP
我要回答