现在我们有三个函数,f1, f2, f3
按正常的思路我们会这样写代码:
function f1 (){}; function f2 (){}; function f3 (){}; //在这里调用函数 f1(); f2(); //假如这个函数会执行很长时间 f3();
但是假如我们f2这个函数在执行的时候会花费大量时间,或者直接就进入了一个死循环了,那我们的f3就别指望能被调用了,因为Javascript语言的执行环境是"单线程"(single thread)。
所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。
为了应对这样的事情,我们就有了异步模式编程;
方法一:回调方法实现异步编程
要点:setTimeout 和 setInterval这两个定时器默认都是异步模式执行
我们把代码写成这样:
1 function f1 (){}; 2 function f2 (callback){ 3 setTimeout(function(){ 4 callback(); 5 },1000) 6 //f2的代码在这里执行 7 //如果把setTimeout放到末尾,依然要等f2执行完才能被触发 8 }; 9 function f3 (){}; 10 //在这里调用函数 11 f1(); 12 f2( f3() ); //f3函数是以参数的形式传入,它在f2开始执行1s后开始执行f3函数
方法二:事件监听
这种方式是采用事件驱动模式。即任务的执行不取决于代码的顺序,而取决于某个事件是否发生