【发布时间】:2012-09-03 03:37:07
【问题描述】:
我的代码是:
var length = 20;
function fn(){
console.log(this.length);
}
var o = {
length:10,
e:function (fn){
fn();
arguments[0]();
}
}
o.e(fn);
输出是20,1,谁能告诉我为什么?
【问题讨论】:
-
@muistooshort 你说的是
fn()和arguments[0](),一个叫call,另一个叫apply? -
在第一个呼叫中您获得 20
this === window,在第二个呼叫中获得this===arguments。将 console.log 更改为console.log(this.length,this);并将调用更改为o.e(fn,'test');,您会看到您获得了参数数组。 -
@dbaseman:这些更多是关于用明确的
this来做fn()。arguments[0]()的行为与它一样,因为有一个隐藏点,所以它有点像在说arguments.0()(如果后者当然是有效的 JavaScript)。
标签: javascript arguments this