您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

js中同步和异步编程

时间:2020-03-11 12:30:47  来源:  作者:

这是一篇给前端小白看的文章,大神请绕道~~~不送~~

我们先来看一到一道面试题,一共5行代码,问输出结果是什么。

for(var i=0; i<5; i++){

  setTimeout(function(){

    console.log(i);

  },1000);

}

这道题的正确率仅有50%,对于前端初学者更是难上加难,不能理解。

 

先说同步执行,就是规定代码必须自上而下执行。等上一行代码执行完,才能执行下一行的代码。

好比我们闯关游戏,甭管这关有多难,你都得通关后才能开启下一关。像这段代码,

js中同步和异步编程

js的同步执行

中间的for循环,要循环两万次,那也等它循环结束后再执行下面的代码。

这就是同步执行,在js语言中,大部分都是同步执行的。

 

再来说异步,js中少有的异步,一定要记牢。

1.定时器 setTimeout setinterval

2.ajax的异步请求

3.es6中的promise

看这段代码,

js中同步和异步编程

ajax的异步编程

先执行第二行的变量声明,然后执行ajax的异步请求,这时,如果是同步,就会等请求结束后,才会执行下面的代码。而异步的好处就是,不用等待请求是否结束,仍然可以执行下面的代码,向控制台打印变量。一般请求时间是不固定的,异步的话,就能大大节省打开页面的时间。

再看这段代码,

js中同步和异步编程

定时器也是异步编程

第三行设置了一个定时器,定时器也是异步的,无论何种定时器,函数里面的内容都不会在这里执行。

都要等到浏览器打开时才会依照时间顺序执行。所以对于异步,可以理解为不会阻塞下面代码执行。

最后,我们再看一下片头的这道面试题。

for(var i=0; i<5; i++){

  setTimeout(function(){

    console.log(i);

  },1000);

}

我们知道,for循环是同步执行的,循环了5次,分别设置了5个定时器,

这5个定时器,等浏览器打开时,会依次执行函数里的内容,console.log(i);

i是全局变量,此时已随着for循环从0递增成了5。所以最后的结果是,5个5。



Tags:js 异步编程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
这是一篇给前端小白看的文章,大神请绕道~~~不送~~我们先来看一到一道面试题,一共5行代码,问输出结果是什么。for(var i=0; i<5; i++){  setTimeout(function(){    console.lo...【详细内容】
2020-03-11  Tags: js 异步编程  点击:(92)  评论:(0)  加入收藏
▌简易百科推荐
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> <script> console.log(returnCitySN["cip"]+&#39;,&#39;+returnCitySN["cname"]) </script> JS命名空间是...【详细内容】
2022-07-14  马克-1949    Tags:js   点击:(4)  评论:(0)  加入收藏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>计时</title> </head> <body> <div style="display: flex; justify-content: center; align-item...【详细内容】
2022-07-12  马克-1949    Tags:js   点击:(8)  评论:(0)  加入收藏
今天,我们来总结下我们平常使用的工具函数,希望对大家有用。 1、封装fetch 源码: /** * 封装fetch函数,用Promise做回调 * @type {{get: (function(*=)), post: (function(*=,...【详细内容】
2022-07-07  马克-1949    Tags:JS   点击:(17)  评论:(0)  加入收藏
let arr = ["2", "4", "6", "8", "10", "12", "14", "16", "18", "20", "22", "24", "27", "30", "33", "36...【详细内容】
2022-07-06  马克-1949    Tags:js   点击:(24)  评论:(0)  加入收藏
Enums 是 Enumerations 的缩写,是预设的常量,可以由开发人员定义以在代码的其他地方使用。 对于 JavaScript 开发人员来说,枚举的概念通常是新的,但它们相对容易理解。 Enums 为...【详细内容】
2022-07-06  庄志炎    Tags:TypeScript   点击:(25)  评论:(0)  加入收藏
前言在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没有将其映射为一个具体的 struct;如果想要获取值就需要先做断言将其转换为 map 或...【详细内容】
2022-07-05  crossoverJie    Tags:JSON   点击:(19)  评论:(0)  加入收藏
1、利用“或”(||)短路逻辑,给变量赋值。 // a应该是一个有意义的字符串,不能说null,undefined,nullconst getData = (a) => { // let b = ""; // if (a !== null...【详细内容】
2022-07-04  milesmatheson    Tags:Javascript   点击:(22)  评论:(0)  加入收藏
作者:极客小俊公众号同名: 一个把逻辑思维转变为代码的技术博主前言⚽你们一定在CSDN上见过以下这种强制恶心的关注 才能展开看到你想看的文章如图 好的 今天就必须教大家一...【详细内容】
2022-06-29  极客小俊    Tags:javascript   点击:(52)  评论:(0)  加入收藏
最近开发的项目上需要把数据导出为 xlsx 文档,找了一圈,发现 node-xlsx 简单好用,分享给各位。关于 node-xlsx在 web 开发中,管理后台生成 excel 报表并且下载,一个很常用的功能...【详细内容】
2022-06-24  那些免费的砖    Tags: js 库   点击:(98)  评论:(0)  加入收藏
统一资源定位符(URL),是对 Web 资源(网页、图像、文件)的引用。URL 是指定资源位置和检索资源的一种协议(如http、ftp、mailto)。如下代码,这是今日头条发布文章的URL地址:https://...【详细内容】
2022-06-24  前端石三    Tags:js   点击:(43)  评论:(0)  加入收藏
站内最新
站内热门
站内头条