用EventProxy,绑定监听事件,如果一直没触发,是不是监听会一直保留?
发布于 9 年前 作者 kilobitcy 4913 次浏览 最后一次编辑是 8 年前 来自 问答

用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 谢谢你的答复

回到顶部