小米二面面试题分析

责编:menVScode 2017-08-30 1:01 阅读(976)

代码部分

var foo=function(m,n){   //this
    console.log(n);
    return {
        foo:function(o){
              console.log(o);
              return foo(o,m);   //window.foo  foo(2,1)
            }
    }
}

        问题一

var result=foo(1);  
/*
    console.log(n),结果为undefined,因为n参数未传默认是undefined。
    把foo函数的返回值:一个对象,赋值给result变量,等价于:
    var result = {
        foo:function(o){
              console.log(o);
              return foo(o,m);   //window.foo  foo(2,1)
            }
    }
*/
result.foo(2);
/*
    console.log(o),结果为2
    返回值是foo(o,m),o=2,m=1(因为闭包关系)
    调用foo(2,1),console.log(n),结果为1
*/
result.foo(3); //步骤同上
result.foo(4); //步骤同上

        问题二

var result = foo(2).foo(3).foo(4).foo(5)
/*
    先调用foo(2),得到返回值是一个对象{},foo(2).foo(3)可看成:
    {
        foo:function(o){
              console.log(o);
              return foo(o,m);   //{}.foo
            }
    }.foo(3),相当于调用对象内的foo方法。
    整体:foo(2)=》 对象.foo(3) =>对象.foo(4)=>对象.foo(5)
*/


标签: 闭包
前端交流群: MVC前端网(menvscode.com)-qq交流群:551903636

邮箱快速注册

忘记密码