IIFE vs bind()用于事件/回调函数

时间:2016-04-20 14:36:56

标签: javascript iife

比方说,例如,我需要注册一个onclick事件,该事件调用另一个函数sayHello()来表示问候,其参数作为当前范围内的变量。

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

var currentName = "James";

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

但是,我也可以通过bind()方法使用函数currying版本,如下所示:

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

尽管使用IIFE方法可以让你在匿名方法中做的不仅仅是一个函数调用,但是将它换成currying方法有什么不利之处吗?

1 个答案:

答案 0 :(得分:3)

  

通过bind()方法

进行函数curry

它是partial application actually

  

bind换取IIFE是否有任何不利之处?

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

这是imo的主要缺点:它有相当大但不必要的时间更长。我更喜欢简洁。