在严格模式下在自身内部引用绑定函数

Reference bound function inside itself in strict mode

我需要一个绑定的事件侦听器函数来引用自身,但我没有看到在严格模式下访问自身的方法(arguments.callee 不可用)。

示例见以下代码片段:

function callback(boundParam, event) {
  // This does not work here as not 'callback' was added
  // to the event bus but 'boundCallback'
  eventBus.removeListener(callback);   
}

function foo () {
  const boundCallback = callback.bind({}, 7);
  eventButs.addListener(boundCallback);
}

我有哪些选择?

不是 JavaScript: remove event listener 的副本,因为我需要引用绑定函数!

也许内联处理程序,这样您就不需要绑定:

function foo () {
  function callback (){
    //...
    eventBus.removeListener(callback);
  }
  eventBus.addListener(callback);
}

您可以创建一个函数,在调用时 returns 引用绑定函数。我们称该函数为 getBoundCallback。然后,将其附加到 bind() 调用的参数列表中,以便接收 callback 中的函数。然后您应该能够调用 getBoundCallback 并取回实际的绑定函数:

function callback(boundParam, getBoundCallback, event) {
    eventBus.removeListener(getBoundCallback());
}

function foo() {
    let boundCallback;
    const getBoundCallback = () => boundCallback;
    boundCallback = callback.bind({}, 7, getBoundCallback);
    eventButs.addListener(boundCallback);
}

请注意 boundCallback 的声明和初始化是如何分开的,因为初始化 boundCallback.

的语句需要引用 getBoundCallback