如何才能在ES2015中实现Node的emitter.removeListener?添加一个回调到一个数组很简单:从array/object /设置
let callbacks = [];
function registerCallback(handler) {
callbacks.push(handler);
});
如何特定功能被删除后,没有返回registerCallback some identifier for the function?换句话说,unregisterCallback(handler)
不应该需要任何其他参数,并应该删除该处理程序。 unregisterCallback
将如何检查之前是否添加了匿名函数?
正在运行handler.toString()
(以及可能的哈希函数)为函数创建标识符的可靠解决方案?或者unregisterCallback
如何通过callbacks
迭代去除那个特定元素? (或者找到在一个集的对象或功能相应的键。)
mySet.add(function foo() { return 'a'})
mySet.has(function foo() { return 'a'}) // false
感谢。将函数本身用作密钥也适用于Set。 –
有趣的是,'setTimeout()'和'setInterval()'返回一个标识符,而不是'clearTimeout()'和'clearInterval()'具有相同的功能。 –
@DanDascalescu是的,这很有趣。这可能是由于这些功能是在[作为一等公民的功能]之前设计的(https://en.wikipedia.org/wiki/First-class_function),因此JavaScript的性质在文化上显而易见。 JavaScript最初设计得非常快,许多最初的设计都可以追溯到那个领域内糟糕的Java。这也可能是实施泄漏的情况。 –