Powiązanie MDN dlaczego łączymy argumenty podczas wywoływania
MDN określa metodę wiązania polyfill dla tych przeglądarek bez rodzimej metody wiązania:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
Ten kod ma następującą linię:
aArgs.concat(Array.prototype.slice.call(arguments))
Który jest przekazywany jako argument do metody stosowania w funkcji:
fToBind.apply(this instanceof fNOP && oThis
? this
: oThis,
aArgs.concat(Array.prototype.slice.call(arguments)));
Jednak ta linia faktycznie powtarza argumenty, więc jeśli wywołam metodę wiązania jako:
fnX.bind({value: 666}, 1, 2, 3)
argumenty przekazywane do fnX to:
[1, 2, 3, Object, 1, 2, 3]
Uruchom następujący przykład i zobacz wyjście konsolihttp://jsfiddle.net/dtbkq/
Argumenty zgłaszane przez fnX to jednak [1, 2, 3], co jest poprawne. Czy ktoś może wyjaśnić, dlaczego argumenty są duplikowane podczas przekazywania wywołania, ale nie pojawiają się w zmiennej argumentów funkcji?