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 появляются в переменной аргументов функции?