猿问

好陌生的一道js面试题,怎么解析呢

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


问a,b,c分别输出什么???

各位大神,这应该怎么解析呢。’a,b,c这赋值写法很少见?


繁星淼淼
浏览 538回答 5
5回答

九州编程

var a = fun(0).fun(1);//这里执行fun(0),打印o,o为undefined,并返回一个对象{fun:function(m){return fun(m,n);}},对象里的n指向0//接下来执行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的运行结果,即打印0,并把{fun:function(m){return fun(m,n);}}赋值给a(此时n指向1)//记住 a = {fun:function(m){return fun(m,n);}} (此时n指向1)a.fun(2);//这里执行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,1)的运行结果,即打印1,并返回{fun:function(m){return fun(m,n);}},没有接收方a.fun(3);//这里执行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(3,1)的运行结果,即打印1,并返回{fun:function(m){return fun(m,n);}},没有接收方var b =fun(0).fun(1).fun(2).fun(3);//这里执行fun(0),打印o,o为undefined,并返回一个对象{fun:function(m){return fun(m,n);}},对象里的n指向0//接下来执行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的运行结果,即打印0,并返回{fun:function(m){return fun(m,n);}} (此时n指向1)//接下来执行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,1)的运行结果,即打印1,并返回{fun:function(m){return fun(m,n);}} (此时n指向2)//接下来执行{fun:function(m){return fun(m,n);}}.fun(3),得到的是fun(3,2)的运行结果,即打印2,并返回{fun:function(m){return fun(m,n);}}赋值给b (此时n指向3)var c =fun(0);//这里执行fun(0),打印o,o为undefined,并返回一个对象{fun:function(m){return fun(m,n);}}赋值给c,对象里的n指向0c.fun(1);//这里执行{fun:function(m){return fun(m,n);}}.fun(1),得到的是fun(1,0)的运行结果,即打印0,并返回{fun:function(m){return fun(m,n);}},没有接收方c.fun(2);//这里执行{fun:function(m){return fun(m,n);}}.fun(2),得到的是fun(2,0)的运行结果,即打印0,并返回{fun:function(m){return fun(m,n);}},没有接收方c.fun(3);//这里执行{fun:function(m){return fun(m,n);}}.fun(3),得到的是fun(3,0)的运行结果,即打印0,并返回{fun:function(m){return fun(m,n);}},没有接收方

慕盖茨4494581

fun方法返回了一个对象 对象的fun属性又是这个fun方法 所以不论调谁的fun方法 都返回一个对象 可以对输入的参数做记忆

慕妹3146593

外层fun函数返回一个对象,这个对象的fun函数返回的外层fun函数的调用结果,o是会记忆的。按照这个就应该很好分析出来

慕莱坞森

第一个:var a = fun(0).fun(1);相当于执行外面的fun(n,o)函数,因为o没有传参,所以console.log(o)为undefined,然后return {fun:function(m){    return fun(m,n);}}的意思就是将里面的fun:function(m)赋值给fun(0),然后在则行他,相当于则行fun(m,n),最后结果赋值给avar a = fun(0).fun(1);a.fun(2);a.fun(3);     的完整流程:fun(0) == fun(n,o){     //这里o没传参,所以值为undefined    console.log(o); o = undefined     return fun:function(m){  //到了这一步,就相当于 fun() = fun:function(m){return                                                                                    fun(m,n);}              return fun(m,n); n = 1 //接受上面的参数,为1            }    }然后fun(0).fun(1) 就相当于执行了 刚刚return会来的函数 fun(m,1),又回到最外层的函数,以此类推输出结果为:undefined,0,1,1语言组织能力一般,请见谅

尚方宝剑之说

    function fun(n,o){    //fun一        console.log(o);        return {            fun:function(m){  //fun二                return fun(m,n);   //fun三            }        }    }首先要弄清楚这里的三个fun到底是指的什么fun一:一个全局的函数,返回值是一个对象objfun二:是返回对象obj里面的一个键(key),这个键对应的是一个匿名函数fun三:调用的fun一从最开始理解var a = fun(0).fun(1);最先执行的是fun(0)这个时候没有第二个参数o,所以为undefined。这个时候fun(0)返回了一个对象:    {        fun:function(m){            return fun(m,0);              }    }    var a = fun(0).fun(1);     //这时候再把1带入就是      var a = function(1){ return fun(1,0)};        //其实就是    var a = fun(1,0);   //这个时候o为0 ----打印为0         //返回的对象为     {        fun:function(m){            return fun(m,1);              }    }        a.fun(2);  //也就是  fun(2,1) ----打印为1       a.fun(3);  //也就是  fun(3,1) ----打印为1        //a一系列的打印下来    undefined   0  1  1        后面的B和C像这样一部一部的推即可
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答