var length = 10;function fn(){ console.log(this.length);}var obj = { length : 5, men:function(fn){ fn(); arguments[0](); }}obj.men(fn,1);如题,输出为10 和 2。哪位大神能够详细的讲一下原理,谢谢了。
5 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
先说一个准则:谁调用方法,this就是谁。直接调用函数,this是window对象。
第一个10应该没啥问题吧。men中调用了fn函数。根据上面的准则,this是window,那么很明显length就是10了。
第二个arguments[0](); 稍微分解下来看,变成 arguments.xx() ,因为下标和直接属性是类似的,所以我暂时用xx代替。
此时,根据准则,this就 应该是arguments,它的长度就是我们提供的参数个数,所以答案就是2。
引申:如果修改为: var fn2 = arguments[0]; fn2(); 此时答案会变成什么?
添加回答
举报
0/150
提交
取消