JavaScript学习-5——异步同步、回调函数

时间:2023-01-12 07:57:30

----------异步同步函数

----------回调函数

一、异步同步函数

同步:发送一个请求,等待返回,然后再发送下一个请求

异步:发送一个请求,不等待返回,随时可以再发送下一个请求

  同步可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内            容就会出错,同步就会按顺序来修改。

  异步则是可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。
  这些都是对的。
  同步和异步最大的区别就在于。一个需要等待,一个不需要等待。
  比如广播,就是一个异步例子。发起者不关心接收者的状态。不需要等待接收者的返回信息
  电话,就是一个同步例子。发起者需要等待接收者,接通电话后,通信才开始。需要等待接收者的返回信息

异步代码:

     function a(){
console.log("执行a函数");
setTimeout(function(){
console.log("执行a函数的间隔")
},2000)
}
function b(){
console.log("执行b函数");
}
a();
b();

  运行代码时优先执行a函数,并且a的延迟调用前执行b函数,最后执行a的 延迟函数,所以即使,时间设置为0,也是会照样先执行函数b

JavaScript学习-5——异步同步、回调函数  => JavaScript学习-5——异步同步、回调函数

并且:

调用 setTimeout 函数会在一个时间段过去后在队列中添加一个消息。这个时间段作为函数的第二个参数被传入。如果队列中没有其它消息,消息会被马上处理。但是,如果有其它消息,setTimeout 消息必须等待其它消息处理完。因此第二个参数仅仅表示最少的时间 而非确切的时间,所以即使,时间设置为0,也是会照样先执行函数b.

同步代码

     var a = 0;
function one(){
a=1;
console.log(a);
}
function two(){
console.log(a);
}
one();
two();

  two函数会等one函数完成之后去执行,所以结构输出为1,因为one函数修改了全局变量a的值,one执行之后才执行的two函数;

二、回调函数

回来调用,把函数作为参数使用

回调函数是作为参数传递给另一个函数并在其父函数完成后执行的函数。

所以回调与同步、异步并没有直接的联系,回调只是一种实现方式,既可以有同步回调,也可以有异步回调,还可以有事件处理回调和延迟函数回调,这些在我们工作中有很多的使用场景

始终记着callback,只是一个形参名字而已.

观察下面几个例子

举例普通函数及调用:

     function plus(){
console.log("函数plus被执行");
}
plus();

  输出结果为:

  JavaScript学习-5——异步同步、回调函数

  另一种方法:

     var num = plus;
num();
function plus(){
console.log("函数plus被执行");
}

  同样输出结果为:

    JavaScript学习-5——异步同步、回调函数

复杂点的例子: operation即为回调,传进来的函数就是回调函数

     var num = mathc(10,5,minus);//运算过程就是operation=minus=function(a,b){return a+b;}
console.log(num);
function mathc(a,b,operation){ //operation意思是运算,作为形参
//把10,5,minus传递给mathc函数,其中minus作为一个函数方法
var number = operation(a,b);
//然后把a,b传递给minus函数,以上语句的本质就是 minus(a,b);
return number;
}
//以下为运算方式的函数
function plus(a,b){
return a+b;
}
function minus(a,b){
return a-b;
}

  输出结果为:

  JavaScript学习-5——异步同步、回调函数

看上去很乱,我们来解析一下过程:

①首先10,5,minus作为参数传递给函数mathc,而此时minus则是minus函数的整体内容

  输出一下minus为:

    JavaScript学习-5——异步同步、回调函数

②然后var number = operation(a,b)的语句,就是operation=minus,即为var number = minus(a,b); minus是函数而括号内则代表了形参如果写代码就如下:

     var number = function minus(a,b){
return 10-5;
}

③最后调用函数mathc

  mathc(10,5,minus)即为:传递了三个参数a,b以及minus函数,而函数的形参就是operation

JavaScript学习-5——异步同步、回调函数的更多相关文章

  1. 6.26学习 异步委托回调函数 VS 多线程 VS 并行处理

    描述: 我现在是轮询着构建实例,然后这个实例去执行一个方法,但是执行方法需要大约10s时间,全部轮询下来需要很长时间.所以我现在要更改,头给了我两个方法,1多线程 2异步委托回调函数. 异步委托回调函 ...

  2. python 并发编程 同步调用和异步调用 回调函数

    提交任务的两张方式: 1.同步调用 2.异步调用 同步调用:提交完任务后,就在原地等待任务执行完后,拿到结果,再执行下一行代码 同步调用,导致程序串行执行 from concurrent.future ...

  3. javascript es6 Promise 异步同步的写法(史上最简单的教程了)

    1 来个简单的例子 var p = new Promise(function(resolve, reject){ //做一些异步操作 setTimeout(function(){ console.lo ...

  4. JavaScript学习笔记(十二) 回调模式(Callback Pattern)

    函数就是对象,所以他们可以作为一个参数传递给其它函数: 当你将introduceBugs()作为一个参数传递给writeCode(),然后在某个时间点,writeCode()有可能执行(调用)intr ...

  5. JavaScript学习总结-技巧、有用函数、简洁方法、编程细节

    整理JavaScript方面的一些技巧.比較有用的函数,常见功能实现方法,仅作參考 变量转换 //edit http://www.lai18.com var myVar = "3.14159 ...

  6. JavaScript学习总结-技巧、实用函数、简洁方法、编程细节

    整理JavaScript方面的一些技巧,比较实用的函数,常见功能实现方法,仅作参考 变量转换 var myVar = "3.14159", str = ""+ ...

  7. javascript总结29 :递归与回调函数

    1 递归函数 -递归的实质就是函数自己调用自己. -递归注意点:递归必须有跳出条件,否则是死循环. var i = 1; fn(); function fn(){alert("从前有座山,山 ...

  8. C# 异步委托回调函数使用

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  9. 异步编程(回调函数,promise)

    一.回调函数 ①概念:一般情况下,程序会时常通过API调用库里所预先备好的函数.但是有些库函数却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务.这个被传入的.后又被调用的函数就称为回调函 ...

随机推荐

  1. github创建文件夹

      网页上只能通过在创建新文件的时候顺便创建文件夹(文件夹与文件用 / 隔开),例如home/test.md就在该仓库下创建了一个文件夹home,该文件夹下有一个新的文件test.md

  2. 烂泥:puppet添加带密码的用户

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前一篇文章,我们介绍了有关puppet3.7的安装与配置,这篇文章我们再来介绍下如何利用puppet添加带密码的用户. 要通过puppet添加带密码的用 ...

  3. 【lucene系列学习四】log4j日志文件实现多线程的测试

    参考资料:http://nudtgk2000.iteye.com/blog/1716379 首先,在http://www.apache.org/dyn/closer.cgi/logging/log4j ...

  4. Struts2 返回 json 格式数据

    最近由于工作原因,没时间更新,那些没能看到的同学,很抱歉了,话不多说,继续写~~ 关于json的返回需要用到一个工具包来将书转换为json格式,在此用到的jar包为: import net.sf.js ...

  5. 解决jenkins运行磁盘满的问题

    解决jenkins运行磁盘满的问题 - ling811的专栏 - CSDN博客 https://blog.csdn.net/ling811/article/details/74991899 1.自动丢 ...

  6. [C]变量作用域

    函数环境变量作用域 C语言栈环境变量作用域跟JS是类似的. 就是内部函数可以访问外部函数的执行(栈)环境变量. 当访问一个变量时,程序将会查询当前栈环境是否存在这个变量,如果没有,将会往上层栈环境继续 ...

  7. HDU 1715 斐波那契数列1000项

    二维数组模拟大数加法就可以了,不太难,直接上代码了. #include<stdio.h> #include<string.h> #include<math.h> # ...

  8. cad&period;net的undo返回操作

    这是提供给许多从lisp转移到c#的开发人员的一个函数,这个函数利用后绑代码实现undo返回操作. 本代码由edata提供: edata博客 /// <summary> /// 命令动作编 ...

  9. nodejs nodemailer 使用

    index.js const nodemailer=require("nodemailer") let sendEmail=function () { var transporte ...

  10. Spring的IOC原理 通俗解释

    1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械 ...