js是单线程,就是说一次只能执行一个任务,若是须要执行多个须要排队依次执行(同步加载),但有时候任务须要长时间执行,js顺序加载执行的话,会至关慢,形成卡死、无响应等现象,浏览器端,耗时长的操做都应该考虑异步加载。javascript
js单线程执行,因此异步请求是由浏览器新开一个线程请求,当请求的状态变动时,若是先前已设置回调,这异步线程就产生状态变动事件放到JavaScript引擎的处理队列中等待处理。java
最经常使用的就是ajax异步请求,向服务器端发POST/GET请求,服务器完成操做后回调js中函数ajax
假定有两个函数f1和f2,后者等待前者的执行结果。 浏览器
f1(); f2();
若是f1是一个很耗时的任务,能够考虑改写f1,把f2写成f1的回调函数。服务器
function f1(callback){ setTimeout(function () { // f1的任务代码 callback(); }, 1000); } function f2(){ alert('f2'); } //执行代码就变成下面这样: f1(f2);
采用这种方式,咱们把同步操做变成了异步操做,f1不会堵塞程序运行,至关于先执行程序的主要逻辑,将耗时的操做推迟执行。异步
为页面元素或者方法绑定事件,当元素或事件知足触发操做时,调用事件的函数函数
f1.on('done', f2);
上面这行代码的意思是,当f1发生done事件,就执行f2。而后,对f1进行改写: spa
function f1(){ setTimeout(function () { // f1的任务代码 f1.trigger('done'); }, 1000); }