猿问

一道面试题请问为什么会出现这种结果?

var length = 10;

    function fn(){

        alert(this.length);

    }

    var obj = {

        length:5,

        method:function( fn /* , a */ ){

            fn();

            arguments[0]();

            // this.method.arguments[0]();

            // console.dir(arguments);

            // console.dir(this.method.length);

            // console.dir(arguments.length);

        }

    }

    obj.method(fn);


米琪卡哇伊
浏览 1033回答 2
2回答

胡说叔叔

fn()调用的时候应该是绑定丢失(默认绑定),所以是10之后arg调用,函数的上下文变成了arguments,长度为1

回首忆惘然

第一个弹出10应该好理解,第二个弹出1arguments并不是一个数组,这个你打印一下就可以看到arguments[0]这个0就相当于arguments的一个属性,跟obj[attrName]是一样的arguments[0]()就跟调用obj[attrName]一样,这时候fn里面的this就指向arguments了这样就能理解后一个为什么是1了
随时随地看视频慕课网APP
我要回答