JavaScript高级day45--JS是单线程的

js中的进程和线程

证明

  setTimeout(function () {
    console.log('timeout 2222')//8
    alert('22222222')//9 暂停当前主线程的执行, 同时暂停计时, 点击确定后, 恢复程序执行和计时
  }, 2000)
  setTimeout(function () {
    console.log('timeout 1111')//6
    alert('1111111')//7 暂停当前主线程的执行, 同时暂停计时, 点击确定后, 恢复程序执行和计时
  }, 1000)
  setTimeout(function () {
    console.log('timeout() 00000')//5
  }, 0)
  function fn() {
    console.log('fn()')
  }
  fn()//1 初始化代码
  console.log('alert()之前')//2 初始化代码
  alert('------') //3 初始化代码 暂停当前主线程的执行, 同时暂停计时, 点击确定后, 恢复程序执行和计时
  console.log('alert()之后')//4

暂停当前主线程的执行, 同时暂停计时, 点击确定后, 恢复程序执行和计时
代码的分类:

  • 初始化代码
  • 回调代码-回调函数是作为参数传递给另一个函数并在其父函数完成后执行的函数。

js引擎执行代码的基本流程

  • 先执行初始化代码: 包含一些特别的代码 回调函数(异步执行)
    • 设置定时器(定时器内部包含的回调函数后续执行)
    • 绑定事件监听
    • 发送ajax请求
  • 后面在某个时刻才会执行回调代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • setTimeout()的回调函数是在主线程执行的
  • 定时器回调函数只有在运行栈中的代码全部执行完后才有可能执行

设计成单线程的原因

  • JavaScript的单线程,与它的用途有关。
  • 作为浏览器脚本语言,JavaScript的主要用途是与用户互动以及操作DOM
  • 这决定了它只能是单线程,否则会带来很复杂的同步问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值