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

JS的函数调用问题

JS的函数调用问题

慕尼黑8549860 2018-12-07 08:36:20
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();  此时答案会变成什么?

查看完整回答
反对 回复 2018-12-24
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

为啥是参数个数

查看完整回答
反对 回复 2018-12-24
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

men只有一个参数么不是?怎么传了俩?

查看完整回答
反对 回复 2018-12-24
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

JS里面可以实现这种方式,跟别的语言不一样

查看完整回答
反对 回复 2018-12-24
  • 5 回答
  • 0 关注
  • 524 浏览
慕课专栏
更多

添加回答

举报

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