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

ui设计常用软件有哪些天津网站优化收费

ui设计常用软件有哪些,天津网站优化收费,WordPress书主题,查看本分行javascript是按照语句出现的顺序执行的。js是一行一行执行的#xff1a;let a 1;console.log(a);let b 2;console.log(b);然而实际上js是这样的#xff1a;setTimeout(function(){ console.log(定时器开始啦)});new Promise(function(resolve){ console.log(马上执行for循环…javascript是按照语句出现的顺序执行的。js是一行一行执行的let a 1;console.log(a);let b 2;console.log(b);然而实际上js是这样的setTimeout(function(){ console.log(定时器开始啦)});new Promise(function(resolve){ console.log(马上执行for循环啦); for(var i 0; i 10000; i){ i 99 resolve(); }}).then(function(){ console.log(执行then函数啦)});console.log(代码执行结束);依照js是按照语句出现的顺序执行这个理念应该是这样才对//定时器开始啦//马上执行for循环啦//执行then函数啦//代码执行结束为什么会这样呢1.关于javascriptjavascript是一门单线程语言在最新的HTML5中提出了Web-Worker但javascript是单线程这一核心仍未改变。2.javascript事件循环既然js是单线程那就像只有一个窗口的银行客户需要排队一个一个办理业务同理js任务也要一个一个顺序执行。如果一个任务耗时过长那么后一个任务也必须等着。那么问题来了假如我们想浏览新闻但是新闻包含的超清图片加载很慢难道我们的网页要一直卡着直到图片完全显示出来因此聪明的程序员将任务分为两类同步任务异步任务当我们打开网站时网页的渲染过程就是一大堆同步任务比如页面骨架和页面元素的渲染。而像加载图片音乐之类占用资源大耗时久的任务就是异步任务。关于这部分有严格的文字定义但本文的目的是用最小的学习成本彻底弄懂执行机制所以我们用导图来说明导图要表达的内容用文字来表述的话同步和异步任务分别进入不同的执行场所同步的进入主线程异步的进入Event Table并注册函数。当指定的事情完成时Event Table会将这个函数移入Event Queue。主线程内的任务执行完毕为空会去Event Queue读取对应的函数进入主线程执行。上述过程会不断重复也就是常说的Event Loop(事件循环)。我们不禁要问了那怎么知道主线程执行栈为空啊js引擎存在monitoring process进程会持续不断的检查主线程执行栈是否为空一旦为空就会去Event Queue那里检查是否有等待被调用的函数。举个例子let data [];$.ajax({ url:www.javascript.com, data:data, success:() { console.log(发送成功!); }})console.log(代码执行结束);上面是一段简易的ajax请求代码ajax是异步进入Event Table注册回调函数success。执行console.log(代码执行结束)。ajax事件完成回调函数success进入Event Queue。主线程从Event Queue读取回调函数success并执行。相信通过上面的文字和代码你已经对js的执行顺序有了初步了解。3.setTimeout第一印象就是异步可以延时执行经常这么实现延时3秒执行setTimeout(() { console.log(延时3秒);},3000)渐渐的setTimeout用的地方多了问题也出现了有时候明明写的延时3秒实际却56秒才执行函数这又咋回事啊先看一个例子setTimeout(() { task();},3000)console.log(执行console);根据前面我们的结论setTimeout是异步的应该先执行console.log这个同步任务所以我们的结论是//执行console//task()去验证一下结果正确然后我们修改一下前面的代码setTimeout(() { task()},3000)sleep(10000000)乍一看其实差不多但把这段代码在chrome执行一下却发现控制台执行task()需要的时间远远超过3秒说好的延时三秒为啥现在需要这么长时间啊这时候需要重新理解setTimeout的定义。先说上述代码是怎么执行的task()进入Event Table并注册,计时开始。执行sleep函数很慢非常慢计时仍在继续。3秒到了计时事件timeout完成task()进入Event Queue但是sleep也太慢了吧还没执行完只好等着。sleep终于执行完了task()终于从Event Queue进入了主线程执行。上述的流程走完我们知道setTimeout这个函数是经过指定时间后把要执行的任务(本例中为task())加入到Event Queue中又因为是单线程任务要一个一个执行如果前面的任务需要的时间太久那么只能等着导致真正的延迟时间远远大于3秒。还经常遇到setTimeout(fn,0)这样的代码0秒后执行又是什么意思呢是不是可以立即执行呢答案是不会的setTimeout(fn,0)的含义是指定某个任务在主线程最早可得的空闲时间执行意思就是不用再等多少秒了只要主线程执行栈内的同步任务全部执行完成栈为空就马上执行。举例说明//代码1console.log(先执行这里);setTimeout(() { console.log(执行啦)},0);//代码2console.log(先执行这里);setTimeout(() { console.log(执行啦)},3000);代码1的输出结果是//先执行这里//执行啦复制代码代码2的输出结果是//先执行这里// ... 3s later// 执行啦复制代码关于setTimeout要补充的是即便主线程为空0毫秒实际上也是达不到的。根据HTML的标准最低是4毫秒。4.setInterval上面说完了setTimeout当然不能错过它的孪生兄弟setInterval。他俩差不多只不过后者是循环的执行。对于执行顺序来说setInterval会每隔指定的时间将注册的函数置入Event Queue如果前面的任务耗时太久那么同样需要等待。唯一需要注意的一点是对于setInterval(fn,ms)来说不是每过ms秒会执行一次fn而是每过ms秒会有fn进入Event Queue。一旦setInterval的回调函数fn执行时间超过了延迟时间ms那么就完全看不出来有时间间隔了。因此往往需要对对定时器清空 timer null 避免叠加的出现。5.Promise与process.nextTick(callback)接下来探究Promise与process.nextTick(callback)的表现。Promise的定义和功能本文不再赘述不了解的读者可以学习一下阮一峰老师的Promisehttp://es6.ruanyifeng.com/#docs/promise而process.nextTick(callback)类似node.js版的setTimeout在事件循环的下一次循环中调用 callback 回调函数。进入正题除了广义的同步任务和异步任务我们对任务有更精细的定义macro-task(宏任务)包括整体代码scriptsetTimeoutsetIntervalmicro-task(微任务)Promiseprocess.nextTick不同类型的任务会进入对应的Event Queue比如setTimeout和setInterval会进入相同的Event Queue。事件循环的顺序决定js代码的执行顺序。进入整体代码(宏任务)后开始第一次循环。接着执行所有的微任务。然后再次从宏任务开始找到其中一个任务队列执行完毕再执行所有的微任务。听起来有点绕用文章最开始的一段代码说明setTimeout(function() { console.log(setTimeout);})new Promise(function(resolve) { console.log(promise);}).then(function() { console.log(then);})console.log(console);这段代码作为宏任务进入主线程。先遇到setTimeout那么将其回调函数注册后分发到宏任务Event Queue。(注册过程与上同下文不再描述)接下来遇到了Promisenew Promise立即执行then函数分发到微任务Event Queue。遇到console.log()立即执行。好啦整体代码script作为第一个宏任务执行结束看看有哪些微任务我们发现了then在微任务Event Queue里面执行。ok第一轮事件循环结束了我们开始第二轮循环当然要从宏任务Event Queue开始。我们发现了宏任务Event Queue中setTimeout对应的回调函数立即执行。结束。事件循环宏任务微任务的关系如图所示来分析一段较复杂的代码看看是否真的掌握了js的执行机制第一轮事件循环流程分析如下整体script作为第一个宏任务进入主线程遇到console.log输出1。遇到setTimeout其回调函数被分发到宏任务Event Queue中。我们暂且记为setTimeout1。遇到process.nextTick()其回调函数被分发到微任务Event Queue中。我们记为process1。遇到Promisenew Promise直接执行输出7。then被分发到微任务Event Queue中。我们记为then1。又遇到了setTimeout其回调函数被分发到宏任务Event Queue中我们记为setTimeout2。 宏任务Event Queue微任务Event Queue setTimeout1 process1 setTimeout2 then1 第一轮事件循环宏任务结束时各Event Queue的情况此时已经输出了1和7。我们发现了process1和then1两个微任务。执行process1,输出6。执行then1输出8。好了第一轮事件循环正式结束这一轮的结果是输出1768。那么第二轮时间循环从setTimeout1宏任务开始首先输出2。接下来遇到了process.nextTick()同样将其分发到微任务Event Queue中记为process2。new Promise立即执行输出4then也分发到微任务Event Queue中记为then2。 宏任务Event Queue 微任务Event Queue setTimeout2 process2 then2 第二轮事件循环宏任务结束我们发现有process2和then2两个微任务可以执行。输出3。输出5。第二轮事件循环结束第二轮输出2435。第三轮事件循环开始此时只剩setTimeout2了执行。直接输出9。将process.nextTick()分发到微任务Event Queue中。记为process3。直接执行new Promise输出11。将then分发到微任务Event Queue中记为then3。 宏任务Event Queue 微任务Event Queue process3 then3 第三轮事件循环宏任务执行结束执行两个微任务process3和then3。输出10。输出12。第三轮事件循环结束第三轮输出9111012。整段代码共进行了三次事件循环完整的输出为176824359111012。(注意node环境下的事件监听依赖libuv与前端环境不完全相同输出顺序可能会有误差)6.写在最后(1)js的异步我们从最开头就说javascript是一门单线程语言不管是什么新框架新语法糖实现的所谓异步其实都是用同步的方法去模拟的牢牢把握住单线程这点非常重要。(2)事件循环Event Loop事件循环是js实现异步的一种方法也是js的执行机制。(3)javascript的执行和运行执行和运行有很大的区别javascript在不同的环境下比如node浏览器Ringo等等执行方式是不同的。而运行大多指javascript解析引擎是统一的。(4)setImmediate微任务和宏任务还有很多种类比如setImmediate等执行都是有共同点的有兴趣的同学可以自行了解。(5)最后javascript是一门单线程语言Event Loop是javascript的执行机制欢迎关注
http://wiki.neutronadmin.com/news/327674/

相关文章:

  • 汕头企业制作网站推广合肥 中网站
  • 网站建设与维护1997年WordPress系统配置要求
  • 做网站的域名是做什么用的荥阳做公司网站的公司
  • 惠州市网站建设公司免费软件电视剧最全
  • 网站单页支付宝支付怎么做怎样申请微信小程序开店
  • 网站的设计与制作论文题目温州市网站建设哪家公司好
  • iis网站子目录设置二级域名可以做设计私单的网站
  • 直播间挂人气自助网站网站被抄袭
  • 番禺建设网站哪家好4399游戏官网
  • 东莞做网站 自媒体网站建设案例 算命网站
  • 北京市网站制作郑州做网站哪家比较好
  • 菏泽科技网站建设购物网站开发环境
  • 网站模板 北京公司企业网站建设需要哪些软件
  • 用wordpress建站一定要先有域名和空间吗网站外链建设:论坛签名是否还值得做
  • 做试管婴儿的网站青岛易龙网站建设
  • 有教做点心的网站吗光谷做网站推广价格
  • 广州大石附近做网站的公司哪家好软件开发工程师报考条件
  • 珠海专业制作网站外链seo招聘
  • 博物馆门户网站建设优势建设菠菜网站
  • 网站备案注销 万网沈阳市三好街网站建设公司
  • 东八区网站建设wordpress修改器
  • 做优化的网站超链接怎么做
  • 学校网站建设 效果电商创业新手怎么做
  • 有做数学题的网站吗WordPress支持you2php吗
  • 企业网站优化多少钱私人20服务器
  • 网站制作书籍推荐网站开发如何盈利
  • 天商阳光网站邮箱泉州企业网站建设
  • python做网站多少钱wordpress ssl nginx
  • 建站培训wordpress插件安装教程
  • 开封专业做网站公司定制程序网站