MDN связывает, почему аргументы concat при вызове применяются

MDN определяет метод связывания с полифилом для тех браузеров, которые не имеют собственного метода связывания:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind

Этот код имеет следующую строку:

aArgs.concat(Array.prototype.slice.call(arguments))

Который передается в качестве аргумента методу apply функции:

fToBind.apply(this instanceof fNOP && oThis
                             ? this
                             : oThis,
                           aArgs.concat(Array.prototype.slice.call(arguments)));

Тем не менее, эта строка фактически повторяет аргументы, так что если бы я вызвал метод связывания как:

fnX.bind({value: 666}, 1, 2, 3)

аргументы, переданные в fnX:

[1, 2, 3, Object, 1, 2, 3] 

Запустите следующий пример и посмотрите вывод консолиhttp://jsfiddle.net/dtbkq/

Однако аргументы, сообщаемые fnX, являются [1, 2, 3], что является правильным. Может кто-нибудь объяснить, почему аргументы дублируются при передаче на вызов приложения, но неt появляются в переменной аргументов функции?

Ответы на вопрос(3)

Ваш ответ на вопрос