event/callback 函数的 IIFE 与 bind()

IIFE vs bind() for event/callback function

例如,我需要注册一个 onclick 事件,该事件调用另一个函数 sayHello() 来打招呼,其参数作为当前范围内可用的变量。

我可以使用 IIFE 将变量注入匿名函数的范围,如下所示:

var currentName = "James";

something.onclick = (function(name) {
    return function() {
        sayHello(name);
    };
})(currentName);

不过,我也可以通过 bind() 方法使用柯里化函数的一个版本,如下所示:

var currentName = "James";
something.onclick = sayHello.bind(null, currentName);

尽管使用 IIFE 方法可以让您在匿名方法中执行不止一个函数调用,但将其换成柯里化方法有什么缺点吗?

function currying via the bind() method

partial application actually

Are there any disadvantages to swapping out the IIFE for bind?

您的方法之间的区别在于 bind 传递更多参数,而不是仅使用 name 调用 sayHello。在这种情况下,事件参数将传递给处理程序而不是被忽略。当然这可以修复(使用 arguments 对象或 ES6 rest+spread),但这只会使它变得更加复杂和容易出错。

这就是 imo 的主要缺点:它相当长但不必要地更长。我比较喜欢简洁