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

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吗?
月关宝盒
浏览 285回答 2
2回答

慕的地8271018

通常来说,以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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript