zoukankan      html  css  js  c++  java
  • 49.js单线程 、 定时器是异步

    js 单线程是指:解析js的引擎是按单线程去解析js 的

    单线程任务也称作为同步任务: 程序语言中的同步与现实生活中的同步恰好是相反的概念,js语言中的同步是指,必须先执行完上一步的程序,在执行下一步的程序,而不是同时执行。

    同步任务:先执行完上面的程序,再执行下面的程序,如果程序执行不下去有问题叫做线程阻塞。

    异步任务:是指同时执行不同程序

    异步任务一定有回调函数,但是回调函数不一定是异步:

    左边是执行栈,右边是任务栈: js 会先执行执行栈里的线程,然后再加载异步任务(回调函数)

    因此定时器的时间间隔其实并不准确,因为还有一段时间是加载主线程任务的,无法算进时间间隔中。

    执行栈里是同步任务

    js执行顺序:

    解读2:一旦异步有了运行结果,就会将结果放到任务栈里:比如定时器,过了时间间隔才会把定时器放到任务栈里

          3.主线程执行完毕,就会读取任务队列,然后将任务队列加载到主线程中。

          4.重复执行以上三步,因为,主线程其实可能并未执行完成,因为客户端会与用户有个交互过程,用户可能会提出新任务放进执行栈里。用户也可能会生成定时器放进任务栈里。

    ajax  node 都是异步

    五个定时器打印五次,主线程执行完,i 为 5,再执行任务栈,打印五个5

     解决方法:把定时器放进闭包函数里

    注意:异步是指回调函数是异步,但是时间间隔里的参数不是异步:所以回调函数里面的i 是5

    如下:时间间隔里面的i 是会从0 加一递增的

    因为只有回调函数是异步,因此可以利用传参的形式,令任务栈里的异步函数实时接收变化的执行栈里的参数:

    但是必须注意:令异步接收实时的同步参数,形参必须是与实参一致的  比如 i 与 i 对应:否则:(所以注意不管什么时候写函数,最好形参与实参变量名要一致

    因为这种传进去的i 相当于在函数体内生成AO,打印的i 会直接找AO,

     浏览器:js同步    渲染异步(html css)  任务异步   三者其实分不开

  • 相关阅读:
    Windows常用cmd命令总结
    电脑UEFI启动是什么?
    PHP 7天前的时间戳
    背景图片
    SQLite/SQL Server Compact Toolbox
    修改浏览器下拉条颜色和粗细
    thinkphp5 apache htaccess配置文件重写
    thinkphp5 token验证
    英文共享js
    ul高度为0的解决方法
  • 原文地址:https://www.cnblogs.com/yzdwd/p/12627256.html
Copyright © 2011-2022 走看看