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执行完 ...
随机推荐
- Javascript解析URL
举个栗子,一个网页的URL为https://i.cnblogs.com/EditPosts.aspx?opt=1,要分离出通信协议.host.port.path.query.hash等值.这时候我们应 ...
- OPENGL学习【一】VS2008开发OPENGL程序开发环境搭建
1.VS2008工具自行在网上下载安装,现只提供VS2008开发工具中配置OPENGL环境的详细步骤.开发包及编译工具会在下方一并放出链接. 2.打开CMake的工具,主要的配置信息如下,按照数字顺序 ...
- js操作url参数
function getQueStr(url, ref) //获取参数值 { var str = url.substr(url.indexOf('?') + 1); if (str.indexOf(' ...
- Java的五大原则
五个基本原则: 单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化.单一职责原则可以看做是低耦合.高内聚在面向对象原则上的引申, ...
- easy-ui采坑事件
新用户首次登陆修改密码 imput标签中使用easyui自带的class="easyui-passwordbox"可以是密码隐藏变成黑点但是无法禁用输入法,然后果断的加了一个typ ...
- 产品经理---- idea good idea
想问题有不同的思想. 1.先去娶老婆再生娃. 我有啥,我能用这些做啥? [大概这就是泯然众人的思想吧] 2.先做衣服后长肉 我想要做个啥?然后我需要怎么做?怎么做的什么? 好的产品经理我认为是第二种. ...
- 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)
在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...
- 基于lucene的案例开发:纵横小说分布式採集
转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/46812645 http://www.llwjy.com/blogdetail/9 ...
- Android新手入门2016(8)--ListView之ArrayAdapter
本文来自肥宝传说之路,引用必须注明出处! ListView是Android中经常使用的控件. 什么是列表视图,让我们先看看图: watermark/2/text/aHR0cDovL2Jsb2cuY3N ...
- hdu5592/BestCoder Round #65 树状数组寻找第K大
ZYB's Premutation Memory Limit: 131072/131072 K (Java/Others) 问题描述 ZYBZYB有一个排列PP,但他只记得PP中每个前缀区间的逆 ...