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中的异步的更多相关文章

  1. JS中的异步以及事件轮询机制

    一.JS为何是单线程的? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊.(在JAVA和c#中的异步 ...

  2. js中的异步与同步,解决由异步引起的问题

    之前在项目中遇到过好多次因为异步引起的变量没有值,所以意识到了认识js中同步与异步机制的重要性 在单线程的js中,异步代码会被放入一个事件队列,等到所有其他代码执行后再执行,而不会阻塞线程. 下面是j ...

  3. JS中的异步与回调

    问题的引出:在js中使用异步调用时,有可能会出现在异步的回调函数中设置调用之外的变量值,但在异步调用完成后去使用变量,却发现这些变量值并没有被成功设置的情况.如: google map中的地理编码,地 ...

  4. js中的异步[Important]

    js作为前端最主流的语言,主要处理页面显示变化(mutation)和异步(asynchronicity), js语言的基本要素和使用惯例的演化大都围绕着这两大主题,两者均值得总结和思考的主题, 这里先 ...

  5. 互联网我来了 -- 2. js中&quot;异步/堵塞&quot;等概念的简析

    一.什么是"异步非堵塞式"? 这个名字听起来非常恶心难懂,但假设以 买内裤 这件事情来比喻运行程序的话就非常easy理解"异步非堵塞式"的涵义了. 比如你是一个 ...

  6. 咱们来聊聊JS中的异步,以及如何异步,菜鸟版

    为什么需要异步?why?来看一段代码. 问题1: for(var i=0;i<100000;i++){ } alert('hello world!!!'); 这段代码的意思是执行100...次后 ...

  7. promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解

    * promise承诺 * 解决js中异步编程的问题 * * 异步-同步 * 阻塞-无阻塞 * * 同步和异步的区别? 异步;同步 指的是被请求者 解析:被请求者(该事情的处理者)在处理完事情的时候的 ...

  8. 【第三周读书笔记】浅谈node.js中的异步回调和用js-xlsx操作Excel表格

    在初步学习了node.js之后,我发现他的时序问题我一直都很模糊不清,所以我专门学习了一下这一块. 首先我们来形象地理解一下进程和线程: 进程:CPU执行任务的模块.线程:模块中的最小单元. 例如:c ...

  9. Node.js中的异步I/O是如何进行的?

    Node.js的异步I/O通过事件循环的方式实现.其中异步I/O又分磁盘I/O和网络I/O.在磁盘I/O的调用中,当发起异步调用后,会将异步操作送进libuv提供的队列中,然后返回.当磁盘I/O执行完 ...

随机推荐

  1. C++基础 (10) 第十天 C++中类型转换 异常 栈解旋 io操作

    1之前内容的回顾 C语言中的类型转换(int)a  强转可读性太差了 C++把()拆分成了四种转换方式 static_cast static_cast在编译器编译阶段就进行转换了 2.dynamic_ ...

  2. PART 5: INTEGRATING SPRING SECURITY WITH SPRING BOOT WEB

    转自:http://justinrodenbostel.com/2014/05/30/part-5-integrating-spring-security-with-spring-boot-web/ ...

  3. alsa-lib 交叉编译以及声卡驱动测试 (转)

    l  下载alsa-utils, alsa-lib, 版本要一致 http://www.alsa-project.org/main/index.php/Download l  编译alsa-lib . ...

  4. 面试准备专题——JVM,类编译,类加载,内存错误

    jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优 类的加载机制 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法 ...

  5. BA--空调静压箱的作用

    空调静压箱的主要作用有两个,一个是降低噪音:一个是提高送风距离.工作原理如下:空调出风从空调风机里面出来的时候,具有很大的风速,同时由于空调风机自身的结构原因,空调的出风并不均衡,空气在风管中相互摩擦 ...

  6. 【C/C++多线程编程之十】pthread线程私有数据

    多线程编程之线程私有数据      Pthread是 POSIX threads 的简称.是POSIX的线程标准.         线程同步从相互排斥量[C/C++多线程编程之六]pthread相互排 ...

  7. 基于Solr的HBase实时查询方案

    实时查询方案 HBase+Solr+HBase-Indexer 1.HBase提供海量数据存储 2.solr提供索引构建与查询 3.HBase indexer提供自己主动化索引构建(从HBase到So ...

  8. Android开发之——编码规范

    1. 前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范.该文档仅供参考,只要形成一个统一的风格,见量知其意就可. 2. 源文件基础 2.1 ...

  9. spark transform系列__sortByKey

    该函数主要功能:通过指定的排序规则与进行排序操作的分区个数,对当前的RDD中的数据集按KEY进行排序,并生成一个SHUFFLEdrdd的实例,这个过程会运行shuffle操作,在运行排序操作前,sor ...

  10. HDU 5654 xiaoxin and his watermelon candy 离线树状数组

    xiaoxin and his watermelon candy Problem Description During his six grade summer vacation, xiaoxin g ...