【问题标题】:IIFE vs bind() for event/callback functionIIFE vs bind() 用于事件/回调函数
【发布时间】:2016-08-13 07:59:34
【问题描述】:

比如说,我需要注册一个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 方法可以让您在匿名方法中执行多个函数调用,但将其换成柯里化方法有什么缺点吗?

【问题讨论】:

  • 您没有将事件参数传递给sayHello,而且时间要长得多。
  • 您可以作为答案发布,@Bergi,我将标记为已接受的答案。

标签: javascript iife


【解决方案1】:

通过bind() 方法进行函数柯里化

我是partial application actually

将 IIFE 换成 bind 有什么缺点吗?

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2016-12-24
    • 2014-05-23
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多