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()?
Я перепахал англоязычный интернет, попытки объяснить этот вопрос не удались (вот, вот)
Пояснил все моменты посредством комментариев.