题目如下:varlength=10;functionfn(){console.log(this.length)};varobj={length:5,method:function(fn){fn();arguments[0]();fn.call(obj,12);}};obj.method(fn,1);我的解读如下:obj.method(fn,1);这一段其实是method作为obj的方法调用,this隐式绑定到obj上。执行的是{//此次调用的this指向obj,arguments为function(){console.log(this.length)},1fn();arguments[0]();fn.call(obj,12);}这三条语句。第一个fn是打印出this.length,以我的理解,this在调用时确定指向,在method函数内这里的this隐式绑定到obj上,结果是打印出5;第二条语句其实还是fn,但是this绑定谁我不知道,所以结果我也不知道;第三条语句的this绑定给obj,后面的12是fn的参数没有用,所以打印出5;结果我的分析只有最后一个答案是正确的,求解惑。
2 回答
慕无忌1623718
TA贡献1744条经验 获得超4个赞
第一个fn是作为函数来调用的,他的this为window第二个this是function(fn){}的arguments对象,具有arguments具有是具有length的伪数组,这是为什么是输出是2呢,是因为obj.metnod(fn,1)你传入了2个参数.第三个是this指向obj
添加回答
举报
0/150
提交
取消