最近有一位朋友问我以下代码的输出
var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();
arguments[0]();
}
};
obj.method(fn, 1);Run Code Online (Sandbox Code Playgroud)
我认为答案是10 10,但令人惊讶的是第二次调用,即arguments[0]();值为2,这是传递的参数的长度.换句话说,它似乎arguments[0]();已被转换为fn.call(arguments);.
为什么会这样?是否存在此类行为的链接/资源?
javascript ×1