var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function(fn) {
fn();//10, ясно, ибо this == window
arguments[0]();//2
// hence arguments[0]() is nothing but calling fn().
//Inside fn now, the scope of this function becomes the arguments array,
//and logging the length of arguments[] will return 2.
}
};
obj.method(fn, 1);//
Вопрос: почему в вызове arguments[0](); мы имеем this как arguments?
Ведь console.log(arguments[0]==fn);//true?
Очевидно, как-то происходит вызов fn в контексте объекта/массива arguments, просто скобочная нотация применяется, а не точечная. Но почему в контексте объекта/массива arguments вызов fn происходит?
Что, arguments[0](); как бы (с точки зрения this) соответствует точечной нотации arguments.fn()?
Я перепахал англоязычный интернет, попытки объяснить этот вопрос не удались (вот, вот) Почему следующий пример работает именно так (JavaScript)?
задача отсюда:
Пояснил все моменты посредством комментариев.