MDN 为那些没有原生绑定方法的浏览器指定了一个 polyfill 绑定方法:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
此代码具有以下行:
aArgs.concat(Array.prototype.slice.call(arguments))
它作为 args 传递给函数的 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] 是正确的。有人可以解释为什么在传递给应用调用时参数重复但没有出现在函数参数变量中吗?