Javascript 回调-删除匿名函数回调

Javascript 回调-删除匿名函数回调,javascript,jquery,callback,Javascript,Jquery,Callback,将回调函数添加到$.Callbacks()后,我想再次删除它: var callbacks = $.Callbacks(), foo = function() { console.log('Hello world') }; callbacks.add(foo); callbacks.fire(); // logs 'Hello world' callbacks.remove(foo); callbacks.fire(); // nothing to trigger, removed p

将回调函数添加到$.Callbacks()后,我想再次删除它:

var callbacks = $.Callbacks(),
    foo = function() { console.log('Hello world') };

callbacks.add(foo);
callbacks.fire(); // logs 'Hello world'
callbacks.remove(foo);
callbacks.fire(); // nothing to trigger, removed perfectly
这样就可以了,但现在我想添加一个匿名函数,如下所示:

callbacks.add(function(){ console.log('Hello anonymous world') });
callbacks.fire(); // logs 'Hello anonymous world'
看起来不错,但我无法再删除该功能了

callbacks.remove(function(){ console.log('Hello anonymous world') });
callbacks.remove();

callbacks.fire(); // still logs 'Hello anonymous world'
有没有办法克服这个问题?每个OP请求:


函数由指针标识。您没有指向匿名函数的指针,因此您没有任何要传递给remove()的内容来告诉它要删除哪个函数。简单地传递一个复制函数并不能做到这一点,因为复制函数有一个不同的指针。您需要坚持将函数赋值给一个变量,然后将该变量传递给remove()


引用:

您可以使用arguments.callee(对自身的引用)将其从函数本身(如函数的最后一行)中删除,尽管arguments.callee在“严格模式”中无效。

函数由指针标识。您没有指向匿名函数的指针,因此没有任何内容可以传递给
remove()
,告诉它要删除哪个函数。简单地传递一个复制函数并不能做到这一点,因为复制函数有一个不同的指针。您需要坚持将函数分配给一个变量,然后将该变量传递给
remove()
。也许有一种方法可以检测匿名函数并为其分配一个变量。然后,当删除另一个匿名时,检查它们是否相同?否。它们永远不会相同,因为它们有不同的指针。并且无法比较这两个函数?也许有什么魔法?(去除空白等…)它不是
$.Callbacks()中内置的。您必须获取源代码并扩展它。