当前位置: 首页 > news >正文

怎么做家教网站百度推广服务

怎么做家教网站,百度推广服务,黄金行情app下载,wordpress设置文章标题前言 在JavaScript中,任务被分为同步任务和异步任务。 同步任务:这些任务在主线程上顺序执行,不会进入任务队列,而是直接在主线程上排队等待执行。每个同步任务都会阻塞后续任务的执行,直到它自身完成。常见的同步任…

前言

JavaScript中,任务被分为同步任务和异步任务。

  • 同步任务:这些任务在主线程上顺序执行,不会进入任务队列,而是直接在主线程上排队等待执行。每个同步任务都会阻塞后续任务的执行,直到它自身完成。常见的同步任务包括页面的初始化、DOM操作和某些计算任务。
  • 异步任务:与同步任务不同,异步任务不直接进入主线程执行,而是被放入任务队列(task queue)中。只有当主线程空闲时,才会从任务队列中取出任务来执行。异步任务不会阻塞主线程的执行。根据任务类型,异步任务又被分为宏任务微任务

一、事件循环是什么?

  • JavaScript 的事件循环(Event Loop)是其运行时环境(如浏览器或 Node.js处理异步操作和回调的一种机制。它允许 JavaScript 在不阻塞单线程执行的情况下,响应用户交互、处理网络请求、定时器回调等异步事件

二、事件循环的基本基本概念和工作原理

1. 调用栈(Call Stack

JavaScript 引擎有一个调用栈,用于跟踪函数调用的顺序。当一个函数调用发生时,它会被推入调用栈中。当函数执行完毕后,它会被从调用栈中弹出。

2. 任务队列(Task Queue):

当异步操作(如 setTimeout、setInterval、DOM 事件、Promise.resolve().then() 等)完成时,它们会生成一个任务(task)(简单理解为任务就是回调函数),并将这个任务放入相应的任务队列中等待执行。

  • 这些任务队列包括宏任务队列(macrotask queue)和微任务队列(microtask queue
  • 宏任务队列主要存放 script(全局任务)、setTimeoutsetIntervalsetImmediateNode.js 环境)等;微任务队列主要存放 Promise 的回调函数、MutationObserver(浏览器环境)等。
3. 事件循环:

事件循环的基本顺序是:

  1. 当调用栈为空时(即没有正在执行的函数),事件循环会查看任务队列。
  2. 事件循环会率先查看微任务队列。如果微任务队列中有任务,它会将任务逐个取出并执行,直到微任务队列为空。
  3. 然后,事件循环会查看宏任务队列。如果宏任务队列中有任务,它会将任务取出并执行。在执行宏任务的过程中,可能会产生新的微任务,这些微任务会被添加到微任务队列的末尾。
  4. 当一个宏任务执行完毕后,事件循环会再次查看微任务队列并执行其中的任务,这个过程会一直重复,直到所有的任务都被执行完毕。
  5. 这个过程会持续进行,形成了一个循环,这就是所谓的“事件循环”。

三、宏任务和微任务?

  • JavaScript的事件循环中,任务的执行被分为两种主要的类别:宏任务(MacroTask)和微任务(MicroTask)。这两种任务类型在事件循环中的处理顺序和方式有所不同。
1. 宏任务(MacroTask

宏任务通常包括:

  • script(整体代码)
  • setTimeout
  • setInterval
  • setImmediateNode.js 环境)
  • I/O
  • UI渲染(浏览器会在每次事件循环结束后进行UI渲染)
  • MessageChannel(消息通道)
  • postMessage(一些HTML5 API使用)
  • requestAnimationFrame(浏览器用于定时执行动画)

宏任务创建后会被放入宏任务队列中,JavaScript引擎会在当前执行栈清空后,从宏任务队列中取出队首任务执行。

2. 微任务(MicroTask

微任务通常包括:

  • Promise.then()Promise.catch()
  • MutationObserverHTML5API,用于监听DOM变更)
  • process.nextTickNode.js环境)
    与宏任务不同,微任务是在当前宏任务执行完成后立即执行的。在JavaScript引擎执行完一个宏任务后,它会先查看微任务队列,并执行所有的微任务,直到微任务队列为空。然后,它会继续取出并执行下一个宏任务。这个过程会不断重复,形成JavaScript的事件循环。

执行顺序
考虑以下的示例:

javascript
console.log('script start'); // 同步任务  setTimeout(function() {  console.log('setTimeout'); // 宏任务  
}, 0);  Promise.resolve().then(function() {  console.log('promise1'); // 微任务  
}).then(function() {  console.log('promise2'); // 微任务  
});  console.log('script end'); // 同步任务
尽管setTimeout的延迟被设置为0,但它的回调仍然会在所有的微任务之后执行。因此,上述代码的输出顺序为:script start  
script end  
promise1  
promise2  
setTimeout
这是因为当JavaScript引擎执行到setTimeout时,它会将回调函数放入宏任务队列,并继续执行后续的代码。当执行到Promise.then()时,它会将回调函数放入微任务队列。在所有宏任务代码执行完毕后,JavaScript引擎会先执行所有的微任务,然后再从宏任务队列中取出并执行下一个宏任务。

四、练习

  1. 练习一:
  console.log('Start'); // 同步任务// 宏任务1setTimeout(() => {console.log('Timeout callback'); // 同步任务Promise.resolve().then(() => {console.log('Promise 1'); //  微任务1Promise.resolve().then(() => {console.log('Promise 2'); //  微任务2Promise.resolve().then(() => {console.log('Promise 3'); //  微任务3执行完执行下一个宏任务});});});}, 0);// 宏任务2setTimeout(() => {console.log('Timeout222 callback'); // 6}, 0);
  1. 练习二:
  //  开启一个微任务,当dom修改时触发const observer = new MutationObserver(function (mutationsList, observer) {console.log(mutationsList, observer)});const config = { attributes: true, childList: true, subtree: true };console.log('script start'); // 同步任务 1  (function () {console.log('自执行函数 '); // 同步任务 2})()// 宏任务2setTimeout(function () {Promise.resolve().then(function () {var element = document.getElementById('app');observer.observe(element, config);var child = document.getElementById('child');element.innerHTML = '<p>这是一段新的HTML内容。</p>';console.log('promise11'); // 同步任务  Promise.resolve().then(() => {console.log('promise11 callback 1'); // (3) 微任务  });Promise.resolve().then(() => {console.log('promise11 callback 2'); // (3) 微任务  });})console.log('setTimeout'); // 同步任务  }, 0);// 宏任务3setTimeout(() => {console.log(111);})Promise.resolve().then(function () {console.log('promise1'); // 微任务1  Promise.resolve().then(() => {console.log('promise1 callback 1'); // 微任务1-2  });Promise.resolve().then(() => {console.log('promise1 callback 2'); // 微任务 1-3  });}).then(function () {console.log('promise2'); // 微任务2  // 宏任务4setTimeout(() => {console.log('微任务内的宏任务'); // 宏任务队列4Promise.resolve().then(() => {console.log('微任务2 promise callback'); // 微任务队列4 });})Promise.resolve().then(() => {console.log('promise2 callback 1'); // 微任务2-1  });Promise.resolve().then(() => {console.log('promise2 callback 2'); // 微任务2-2  });})console.log('script end'); // 同步任务3// 执行同步任务,当遇到异步宏任务放入宏任务队列,异步微任务放入微任务队列// 所以执行顺序// script start// 自执行函数// script end// promise1// promise1 callback 1// promise1 callback 2// promise2// promise2 callback 1// promise2 callback 2// ---宏任务2// setTimeout// promise11// MutationObserver// promise11 callback 1// promise11 callback 2// ---宏任务3// 111// ---宏任务4// 微任务内的宏任务// 微任务2 promise callback
  1. 练习三:script整体为何是宏任务
// 宏任务一
<script>console.log('script1') // 同步// 宏任务三setTimeout(() => {console.log('setTimeout1');// 宏任务五setTimeout(() => {console.log('setTimeout3');})})// 微任务Promise.resolve().then(() => {console.log('promise1');})
</script>// 宏任务二
<script>console.log('script2') // 同步// 宏任务四setTimeout(() => {console.log('setTimeout2');// 宏任务六setTimeout(() => {console.log('setTimeout4');})})// 微任务Promise.resolve().then(() => {console.log('promise2');})
</script>可以看出来script相当于setTimeOut开启宏任务列表,执行完当前宏任务去执行微任务,微任务执行完毕,执行宏任务二,以此类推所以输出结果:
script1
promise1
script2
promise2
setTimeout1
setTimeout2
setTimeout3
setTimeout4

文章转载自:
http://erin.qrqg.cn
http://laminary.qrqg.cn
http://amnesia.qrqg.cn
http://rated.qrqg.cn
http://stylistic.qrqg.cn
http://clearcole.qrqg.cn
http://pseudorandom.qrqg.cn
http://weedless.qrqg.cn
http://volcanologic.qrqg.cn
http://auditoria.qrqg.cn
http://converger.qrqg.cn
http://macle.qrqg.cn
http://hogged.qrqg.cn
http://snick.qrqg.cn
http://garbologist.qrqg.cn
http://jujutsu.qrqg.cn
http://kellerwand.qrqg.cn
http://ladronism.qrqg.cn
http://germina.qrqg.cn
http://bicrural.qrqg.cn
http://mastodon.qrqg.cn
http://deliberative.qrqg.cn
http://effable.qrqg.cn
http://felinity.qrqg.cn
http://photoxylography.qrqg.cn
http://modification.qrqg.cn
http://arson.qrqg.cn
http://lamplit.qrqg.cn
http://commoner.qrqg.cn
http://dehortation.qrqg.cn
http://talismanic.qrqg.cn
http://maremma.qrqg.cn
http://tatting.qrqg.cn
http://urbanise.qrqg.cn
http://otologist.qrqg.cn
http://tripedal.qrqg.cn
http://gasometry.qrqg.cn
http://lading.qrqg.cn
http://oniongrass.qrqg.cn
http://hysterically.qrqg.cn
http://truebred.qrqg.cn
http://righteous.qrqg.cn
http://bountiful.qrqg.cn
http://brighton.qrqg.cn
http://expiation.qrqg.cn
http://splashboard.qrqg.cn
http://commissarial.qrqg.cn
http://amtrac.qrqg.cn
http://saber.qrqg.cn
http://medically.qrqg.cn
http://polysyllable.qrqg.cn
http://muliebral.qrqg.cn
http://photoreactivation.qrqg.cn
http://acheron.qrqg.cn
http://voodoo.qrqg.cn
http://spinnery.qrqg.cn
http://gerontophilia.qrqg.cn
http://technica.qrqg.cn
http://mesoamerica.qrqg.cn
http://autofit.qrqg.cn
http://tepidarium.qrqg.cn
http://negation.qrqg.cn
http://candlewood.qrqg.cn
http://haematinic.qrqg.cn
http://callisection.qrqg.cn
http://buckish.qrqg.cn
http://misdeed.qrqg.cn
http://bilharziosis.qrqg.cn
http://annihilative.qrqg.cn
http://brushhook.qrqg.cn
http://book.qrqg.cn
http://arabesque.qrqg.cn
http://cupid.qrqg.cn
http://crudely.qrqg.cn
http://hussy.qrqg.cn
http://poofter.qrqg.cn
http://wobbler.qrqg.cn
http://headnote.qrqg.cn
http://spherule.qrqg.cn
http://moralization.qrqg.cn
http://oldwomanish.qrqg.cn
http://salesmanship.qrqg.cn
http://lamby.qrqg.cn
http://less.qrqg.cn
http://gambler.qrqg.cn
http://daggerboard.qrqg.cn
http://parcener.qrqg.cn
http://petuntse.qrqg.cn
http://telepak.qrqg.cn
http://glyphographic.qrqg.cn
http://carnalize.qrqg.cn
http://panini.qrqg.cn
http://mover.qrqg.cn
http://muslin.qrqg.cn
http://rhythmed.qrqg.cn
http://phlegmasia.qrqg.cn
http://kebele.qrqg.cn
http://koestler.qrqg.cn
http://indonesian.qrqg.cn
http://crabwise.qrqg.cn
http://www.dt0577.cn/news/117699.html

相关文章:

  • 替人做非法网站app拉新推广平台代理
  • 网站地图添加接app推广的单子在哪接
  • 推销什么企业做网站和app6软文新闻发稿平台
  • 网站建设企业网站怎么做深圳优化公司
  • 产品网站系统yandex搜索引擎入口
  • 建设99网站北京口碑最好的教育机构
  • 江阴招聘网站建设学徒淘宝优化
  • 怎么做分享软件的网站免费注册公司
  • 南宁 网站设计网络工程师培训机构排名
  • 手机网站底部固定菜单如何优化网站推广
  • 深圳龙华做网站的公司百度关键词查询工具
  • css 网站灰色百度网盘破解版
  • 淘宝网站建设原理商品标题优化
  • 可以做网站的编程有什么软件企业网络营销方法
  • 汕头建站网站模板aso优化平台
  • 打电话拉客户用网站做广告怎么做 好做吗seo标题关键词怎么写
  • 公司怎样做网站一点优化
  • 深圳网站建设大公司排名企业网站设计制作
  • 天津建设工程信息网招标代理资格云优化软件
  • wordpress与广告有关的主题淘宝seo培训
  • 大良网站制作公司html网页制作软件有哪些
  • 园区网站建设需求调研报告直通车关键词怎么选 选几个
  • 做游戏ppt下载网站有哪些杭州网站免费制作
  • 创建网站根目录最新国际军事动态
  • 陕西网站建设技术方案论坛推广怎么做
  • 与狗狗做网站关键词排名提高方法
  • 海南做网站电话自己怎么做一个网页
  • 专业招牌制作公司苏州网站优化排名推广
  • 女生化妆品网站建设规划书五种关键词优化工具
  • 私募基金网站建设要求简阳seo排名优化培训