为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米琪卡哇伊 2018-08-02 13:19:48
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);
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

fn()调用的时候应该是绑定丢失(默认绑定),所以是10

之后arg调用,函数的上下文变成了arguments,长度为1


查看完整回答
反对 回复 2018-08-05
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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

查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 1032 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信