arguments
в общем случае - это объект внутри каждой функции, который содержит значения аргументов, передаваемых каждой указанной c функции. В вашем случае:
obj.method(fn, 1);
// ^ ^ arguments object will have those 2 values
Поэтому, когда вы arguments[0]()
на самом деле снова вызываете fn
, но , в этом случае вы запускаете fn
из объекта (объекта arguments
) ) и это ключевой момент .
Из-за этого ключевое слово this
в вашем fn
является ссылкой на объект arguments
, который в данном случае имеет значение длины 2, как аргументы, которые вы передали вашему вызову obj.method(fn, 1)
и значение, которое записывается во второй раз.
Глава 1 & 2 из Эта книга содержит более расширенное объяснение того, как this
ведет себя и может помочь Вы немного больше понимаете свой случай.
Также стоит отметить, что у объекта нет свойства .length
, но в то время как объект arguments
является объектом array-like
(проверьте ссылку на arguments
объект) 1035 *.