用EventProxy,绑定监听事件,如果一直没触发,是不是监听会一直保留?
用EventProxy,绑定监听事件,如果一直没触发,是不是监听会一直保留? 如果程序运行多次,会产生过个监听事件。会不会浪费系统资源?
8 回复
只有正确和不正确,没有浪费不浪费。
写个最简单的EventProxy,实际上本质就是这样的
class EventProxy {
_events = {}
on(event, fn) {
this._events[event] = fn;
}
emit() {
this._events[arguments[0]].apply(this, [].slice.call(arguments, 1));
}
}
var eventProxy = new EventProxy();
eventProxy.on('add', (name, age)=> {
console.log(name, age);
});
eventProxy.emit('add', 'jacky', 10);
监听就是保存某个函数,触发就是执行某个函数而已。一直不触发,占据的就是一小块内存而已。
@yuyang041060120,谢谢你的答复。 那如果,程序有错误,又不断的被执行,举例100万次。那就监听(保存)了100万个函数。就算每个只占1K,那也快1G了啊。
@kilobitcy 监听和触发的函数是我们手动调用的,相当于api一样。至于你说的百万情况,估计得写个循环或递归才能实现了,实际上任何方法不都是可以调用多次么,只要我们愿意。
@yuyang041060120,谢谢你的耐心答复。
忘掉ep吧,已经不需要监听多事件的场景了 自豪地采用 CNodeJS ionic
我觉得EventProxy实例也是有生命周期的,注册在EventProxy对象里面的监听函数和EventProxy实例生命周期一致,EventProxy实例没有被引用就会被回收了,同时注册函数也就回收了.这和所有变量的生存周期是一个道理
@holyselina 谢谢你的答复