比方说,例如,我需要注册一个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方法有什么不利之处吗?
答案 0 :(得分:3)
通过
进行函数currybind()
方法
它是partial application actually。
为
bind
换取IIFE是否有任何不利之处?
您的方法之间的区别在于bind
传递了更多参数,而不是仅使用sayHello
调用name
。在这种情况下,event参数将被传递给处理程序而不是被忽略。当然这可以修复(使用arguments
对象或ES6 rest + spread),但它只会使它更复杂和错误。
这是imo的主要缺点:它有相当大但不必要的时间更长。我更喜欢简洁。