JavaScript 异步和回调函数

JavaScript语言的执行环境是单线程的,便是一次只能完成一个任务,其余任务排队等候执行。只有当前一个任务完成时,才能开始进行下一个任务。编程

这种模式的执行环境简单,如果遇到一个耗时较长的任务,将会拖延整个程序的执行。异步

为了解决这个问题,咱们有同步和异步两种任务的执行模式:异步编程

同步模式即上述所说的单线程模式;
异步模式:每一个任务都有回调函数(callback),
前一个任务结束后,不是执行后一个任务,而是执行回调函数,
后一个任务则是不等前一个任务结束就执行,
因此程序的执行顺序与任务的排列顺序是不一致的、异步的。

小剧场:函数

顾客1(打电话):
    老板,我要买本小黄书,你有吗?
老板:
    我找找,一下子给你回电话。( 老板干其余事情。)
顾客2(打电话):
    老板,我要买本红包书,你有吗?
老板:
    我找找,一下子给你回电话。( 老板干其余事情。)
                …………
找到书,老板回电话。

剧场说明线程

其中回电话就是咱们的回调函数,而找书就是任务。
异步:
    找到书(前一个任务完成)就回电话(执行回调函数),
    然后一个任务(找书)无论前一个任务是否完成都会开始。
同步:
    老板接了电话就开始找书(保持通话状态),
    直到书找到知足顾客1的需求,
    顾客2的电话才能打得进来。

回调函数:
回调函数是实现异步编程的最基本的方法。咱们假设有两个函数f1()和f2(),f1()执行完成后才能执行f2():code

f1();
   f2();

假设f1()是一个很耗时的任务,那么咱们能够考虑异步机制,改写f1(),将f2改写为f1()的回调函数:ip

function f1 (callback) {
    
    setTimeout(function () {
    callback()},1000);
    
    }
    
    f1(f2);

采用这种方式,咱们把同步操做变成了异步操做,f1不会堵塞程序的运行,也就是说咱们先执行程序的主要逻辑,将耗时的操做推迟执行。回调函数

欢迎讨论和指出不足^_^同步

相关文章
相关标签/搜索