这几天在疯狂的刷牛客JS基础和JS视频,开始对JS的理解有了更深的一步。下面就大概总结一下我这段时间所总结的JS知识。
JS语言是所谓的单线程语言,也就是一次只能完成一件任务,如果有多个任务,就要排队,等待前一个任务完成后,才会去执行下面的任务。
这种模式有一个缺点就是,只要有一个任务在长时间工作,后面的任务都会不断地等待,拖延整个程序的执行,导致整个页面卡在这个地方。
所以有异步编程这个方法,他包括回调函数,事件监听,发布/订阅,Promise对象。
如果有两个函数,一般来说从上往下的调用,会形成单线程的结果,但现在我们可以将f2写成f1的回调函数。
如function f1(callback){
setTimeout()functon (){
Callback();
},1000);
}
f1();
f1不会阻塞程序的执行,但是不利于代码的维护,各个部分高度耦合(Coupling),且每个人物只能指定一个回调函数。
事件监听如下,任务的执行不取决于代码的顺序,而取决于某个事件的发生。
f1.on(‘done’,f2);
function f1{
setTimeout(function (){
F1.trigger(‘done’);
},1000);
}
f1.trigger(‘done’)表示,执行完成后,就立刻执行done事件,从而开始执行f2。
但是缺点是整个程序会变成事件驱动型,运动流程很不清晰。
发布/订阅模式,又叫做观察者模式。我们假定,存在一个“信息中心”,某个任务执行完成后,就向信息中心“发布(publish)”一个信号,其他任务可以向信息中心“订阅(subcribe)”这个信号,从而知道什么时候自己可以执行。
//f2向信号中心Jquery订阅done信号
jQuery.subscribe("done", f2);
function f1(){
setTimeout(function () {
// f1的任务代码
//发布done信号
jQuery.publish("done");
}, 1000);
}
//f2执行完成后,取消订阅
jQuery.unsubscribe("done", f2);
发布/订阅模式与“事件监听类似”,但是明显比后者好,因为我们可以通过查看消息中心,了解存在多少信号,多少个订阅者,从而监听程序的运行。