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执行完 ...
随机推荐
- [SCOI2010] 股票交易 (单调队列优化dp)
题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi, ...
- xml00
<?xml verson="1.0" encoding="ISO-8859-1"?> xml声明<note> <to>jon ...
- H3C防火墙——回环流量问题(内网终端通过外网IP访问内部服务器)
http://www.bubuko.com/infodetail-1533703.html
- Apach配置本地域名
分三步: 一,开启虚拟域名设置,在路径中找到(apache\apache2.4.9\conf)httpd.conf 配置文件, 去掉 " Include conf/extra/httpd-v ...
- .NET泛型初探
总所周知,.NET出现在.net framework 2.0,为什么要在2.0引入泛型那,因为微软在开始开发.net框架时并没有想过多个类型参数传输时对方法的重构,这样一来,开发人员就要面对传输多种类 ...
- 婚礼上的谎言(C++实现)
#include<iostream> using namespace std; void main(void) { int a,b,c; char DD,EE,FF; for (a=1;a ...
- 【翻译自mos文章】11.2.0.4及更高版本号的asm实例中MEMORY_TARGET 和 MEMORY_MAX_TARGET的默认值和最小值
[翻译自mos文章]11.2.0.4及更高版本号的asm实例中MEMORY_TARGET 和 MEMORY_MAX_TARGET的默认值和最小值 来源于: Default and Minimum ME ...
- VS2015--win32project配置的一些想法之在 Visual Studio 2015 中进行调试的同一时候分析性能
出处: https://msdn.microsoft.com/zh-cn/magazine/dn973013(en-us).aspx 很多开发商花了绝大多数时间获取应用程序才干正常发挥作用.更少的时间 ...
- hdoj--2069--Coin Change(动态规划)
Coin Change Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- kafka windows安装 命令行下使用测试
1.zookeeper安装: (https://zookeeper.apache.org/releases.html) ①进入zookeeper的相关设置所在的文件目录,例如本文的:D:\bigd ...