JS的函数调用问题

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。哪位大神能够详细的讲一下原理,谢谢了。
慕尼黑8549860
浏览 530回答 5
5回答

慕的地8271018

先说一个准则:谁调用方法,this就是谁。直接调用函数,this是window对象。   第一个10应该没啥问题吧。men中调用了fn函数。根据上面的准则,this是window,那么很明显length就是10了。 第二个arguments[0](); 稍微分解下来看,变成 arguments.xx() ,因为下标和直接属性是类似的,所以我暂时用xx代替。 此时,根据准则,this就 应该是arguments,它的长度就是我们提供的参数个数,所以答案就是2。   引申:如果修改为: var fn2 = arguments[0]; fn2();  此时答案会变成什么?

慕工程0101907

为啥是参数个数

慕桂英546537

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

慕妹3146593

JS里面可以实现这种方式,跟别的语言不一样
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript