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

小白,请教各位大佬!js this问题十分感谢

小白,请教各位大佬!js this问题十分感谢

月关宝盒 2019-07-28 12:17:51
varlength=20;functionfn(){console.log(this.length);}varobj={length:10,api:function(fn){fn();arguments[0]();}}obj.api(fn,2)为何fn()输出的是20,argument[0]()输出的是2;fn()的当前上下文不是obj.api吗?
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

通常来说,以A.B()或A[B]()的方式调用B,那么在B函数中,this是A。
以B()的方式调用,严格模式下没有this。非严格模式下this是全局环境。
到你这里,子啊obj.api()的函数体里,this是obj。但是,由于通过fn()的方式调用fn(),在该次调用中,fn中this是全局环境,输出全局变量length,也就是20。
通过arguments[0]()的方式调用fn(),fn中this是arguments,fn()中的this.length是arguments.length,也就是2。
                            
查看完整回答
反对 回复 2019-07-28
  • 2 回答
  • 0 关注
  • 284 浏览
慕课专栏
更多

添加回答

举报

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