【发布时间】:2018-03-20 13:09:41
【问题描述】:
当我第一次使用 .bind() 时,我被传递给绑定函数的可选参数是预先添加的这一事实绊倒了。当我试图将事情交给匿名事件处理函数时,这让我受益匪浅,有点像这样:
$('#example').on('change', function(arg1, arg2, evt) {
console.log(evt, arg1, arg2);
}.bind(null, arg1, arg2));
.bind() 的 MDN 多次提到前置但从未详细说明,所以我很好奇为什么 - 为什么我必须在函数参数中的 evt 之前放置 arg1 和 arg2? 附加不是更容易理解并且性能稍微好一点吗?
【问题讨论】:
-
这些参数的“可选”是什么?就Javascript而言,什么都没有。通过从左侧绑定参数,您可以确定将按什么顺序处理它们,而您完全不知道绑定参数最终会是什么参数,就好像它们将附加到调用时传递的参数的末尾一样时间。
-
是的,追加会更容易。这正是这里发生的事情。传递的参数附加到之前绑定的参数
-
在这种情况下,附加的是 evt 参数。
-
@deceze 它们是“可选的”,因为它们不是必需的 - 除了“thisArg”之外,我没有给 bind() 任何东西。
-
啊,我明白了,additional arguments 传递给了 bind 方法。