1、回调函数
function f1(calback){
console.log(1)
setTimeout(function () {
calback();
},0)
}
function f2() {
console.log(2)
}
f1(f2);
2、事件监听:
3、订阅/发布模式: 存在一个信号中心,某个任务完成时,向信号中心发出一个信号,其它任务可以向信号中心“订阅”这个信号,从而知道什么时候开始执行
> 存在一个"信号中心",某个任务执行完成,就向信号中心"发布"(publish)一个信号,其他任务可以向信号中心"订阅"(subscribe)这个信号,从而知道什么时候自己可以开始执行。这就叫做["发布/订阅模式"](http://en.wikipedia.org/wiki/Publish-subscribe_pattern)(publish-subscribe pattern),又称["观察者模式"](http://en.wikipedia.org/wiki/Observer_pattern)(observer pattern)。
class EventCenter {
// 定义事件中心
constructor() {
this.events = {}
}
// 发布器
on(evt, handler) {
// 检测事件信号是否存在,当存在时不做操作,不存在时创建给予这个信号的方法存储器(数组)
this.events[evt] = this.events[evt] || []
console.log(this.events[evt])
// 将传入的方法放入数组中
this.events[evt].push({
handler: handler
})
}
// 订阅器
fire(evt, params) {
console.log(1)
// 检测当前被订阅的信号是否存在,存在则执行其内的所有方法
if (!this.events[evt]) {
return
}
for (let i = 0; i < this.events[evt].length; i++) {
this.events[evt][i].handler(params)
}
}
}
let center = new EventCenter();
center.on('event', function(data) {
console.log('event执行了第一个任务')
});
center.on('event', function(data) {
console.log('event执行了第二个任务')
});
console.log(6)
center.fire('event')
//最终结果 6 1 event执行了第一个任务 event执行了第二个任务
网友评论