【发布时间】:2012-10-11 19:02:10
【问题描述】:
MDN 为那些没有原生绑定方法的浏览器指定了一个 polyfill 绑定方法: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] 这是正确的。有人可以解释为什么 args 在传递给 apply 调用时重复但没有出现在函数参数变量中吗?
【问题讨论】:
标签: javascript bind apply