JS中的异步
Hello,日常更新的我“浪”回来了!!!
JS中有三座高山:异步和单线程、作用域和闭包、原型原型链
今天“浪”的主题是JS中的异步和单线程的问题。
主要从这三个方面入手
一、什么是异步(与同步作比较)
二、前端使用异步的场景
三、异步和单线程
一:什么是异步
说异步之前我们先了解一下同步:同步可以简单的来说就是顺序执行
console.log(100); alert(200) //点击确定往下执行,如果不点击确定,就会阻塞不往下执行 console.log(300) //打印100,弹出200(点击确定往下执行),打印300
接下来我们来说异步(当执行异步代码时,不会影响另一些代码执行)
console.log(100);
setTimeout(function() { //异步执行,非阻塞并不妨碍后续代码执行
console.log(300)
}, 1000);
console.log(200)
这段代码的执行结果为:

异步和同步的区别就在于:
同步:会阻塞后续代码的执行
异步:不会阻塞代码执行
二:前端使用异步的场景
1、定时任务:setTimeout 、 setInterval(代码同上)
2、网络请求 :ajax请求、动态的创建<img>加载、
console.log("start")
$.get("./data.json",(data)=>{
console.log(data)
})
console.log("end")
//打印start,打印end 等待获取回调函数传来的data数据渲染页面
//为啥ajax要用异步呢?因为向服务器请求数据,谁也不知道多长时间能返回数据(有可能几秒,有可能拿不到数据)
如果数据拿不到,页面肯定还是要正常显示的,所以必须是异步
console.log("start")
var img = document.createElement("img");
img.onload =function(){
console.log("img is onload")
}
img.src='/aa.png'
console.log("end")
//打印start,打印end,加载图片
3、事件绑定
console.log("start")
document.getElementById("btn").addEventListener("click",()=>{ //ES6箭头函数
console.log("click is finshed")
})
console.log("end")
//打印start,打印end,加载图片
三 、异步和单线程
下面代码和介绍异步的代码区别是延时器没有设置时间
console.log(100);
setTimeout(function() {
console.log(300)
});
console.log(200)
执行顺序:
先打印100,
执行setTimeout,这个函数会被暂存起来,不会立即执行(因为单线程只能一个一个执行)
打印300,
等待所有的程序执行完后,浏览器会看有没有暂存的,
暂存里面有setTimeout,setTimeout没有设置时间,不用等待然后立刻执行
那什么叫单线程呢??
简单来说就是一次只能干一件事,一个一个排队,不能多个一起执行(因为不是多线程)
标准定义:浏览器只分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务,这些任务形成一个任务队列排队等候执行,
但前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,都老老实实的排队等待执行的话,
执行效率会非常的低,甚至导致页面的假死。所以,浏览器为这些耗时任务开辟了另外的线程,主要包括http请求线程,浏览器定时触发器,
浏览器事件触发线程,这些任务是异步的。
JS中的异步的更多相关文章
- JS中的异步以及事件轮询机制
一.JS为何是单线程的? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊.(在JAVA和c#中的异步 ...
- js中的异步与同步,解决由异步引起的问题
之前在项目中遇到过好多次因为异步引起的变量没有值,所以意识到了认识js中同步与异步机制的重要性 在单线程的js中,异步代码会被放入一个事件队列,等到所有其他代码执行后再执行,而不会阻塞线程. 下面是j ...
- JS中的异步与回调
问题的引出:在js中使用异步调用时,有可能会出现在异步的回调函数中设置调用之外的变量值,但在异步调用完成后去使用变量,却发现这些变量值并没有被成功设置的情况.如: google map中的地理编码,地 ...
- js中的异步[Important]
js作为前端最主流的语言,主要处理页面显示变化(mutation)和异步(asynchronicity), js语言的基本要素和使用惯例的演化大都围绕着这两大主题,两者均值得总结和思考的主题, 这里先 ...
- 互联网我来了 -- 2. js中"异步/堵塞"等概念的简析
一.什么是"异步非堵塞式"? 这个名字听起来非常恶心难懂,但假设以 买内裤 这件事情来比喻运行程序的话就非常easy理解"异步非堵塞式"的涵义了. 比如你是一个 ...
- 咱们来聊聊JS中的异步,以及如何异步,菜鸟版
为什么需要异步?why?来看一段代码. 问题1: for(var i=0;i<100000;i++){ } alert('hello world!!!'); 这段代码的意思是执行100...次后 ...
- promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解
* promise承诺 * 解决js中异步编程的问题 * * 异步-同步 * 阻塞-无阻塞 * * 同步和异步的区别? 异步;同步 指的是被请求者 解析:被请求者(该事情的处理者)在处理完事情的时候的 ...
- 【第三周读书笔记】浅谈node.js中的异步回调和用js-xlsx操作Excel表格
在初步学习了node.js之后,我发现他的时序问题我一直都很模糊不清,所以我专门学习了一下这一块. 首先我们来形象地理解一下进程和线程: 进程:CPU执行任务的模块.线程:模块中的最小单元. 例如:c ...
- Node.js中的异步I/O是如何进行的?
Node.js的异步I/O通过事件循环的方式实现.其中异步I/O又分磁盘I/O和网络I/O.在磁盘I/O的调用中,当发起异步调用后,会将异步操作送进libuv提供的队列中,然后返回.当磁盘I/O执行完 ...
随机推荐
- IP实时传输协议RTP/RTCP详解
1.简介 目前,在IP网络中实现实时语音.视频通信和应用已经成为网络应用的一个主流技术和发展方向,本文详细介绍IP协议族中用于实时语音.视频数据传输的标准协议RTP( Real-time Transp ...
- Problem 13
Problem 13 # Problem_13 """ Work out the first ten digits of the sum of the following ...
- 最大团&稳定婚姻系列
[HDU] 1530 Maximum Clique 1435 Stable Match 3585 maximum shortest distance 二分+最大团 1522 Marriage is ...
- nodejs-app.js
设置静态目录 1 2 app.use(express.static(path.join(__dirname, 'public'))); //设置模版渲染的js,css,images的静态文件目录 设置 ...
- BA-闭式冷却塔系统
- Core Dataeasy出现的错误
1.2015-08-24 15:52:17.674 Tasks[3189:144763] CoreData: error: -addPersistentStoreWithType:SQLite con ...
- 大菲波数 【杭电-HDOJ-1715】 附题+具体解释
/* 大菲波数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- Nginx 做系统的前端反向proxy
Nginx是一款很优秀的基于event的webserver.吞吐量大.占用资源少,只是文档就很让人郁闷了,免费的Nginx和收费的Nginx+的文档共用一份,配置完之后才发现免费的Nginx启动某些命 ...
- JMX学习笔记(一)-MBean
JMX学习笔记(一)-MBean 标签: jmxstringjavainterfaceexceptionclass 2010-12-07 22:20 15360人阅读 评论(5) 收藏 举报 分类: ...
- 使用Android Studo开发NDK之Gradle的配置(能debug C代码)
配置: 用的版本号是AS1.5(也能够尝试更高版本号). Gradle地址是distributionUrl=https\://services.gradle.org/distributions/gra ...