首页 > web前端 > js教程 > 正文

js执行机制的概念?js的执行机制的实现方法

不言
发布: 2018-08-11 16:06:03
原创
1611人浏览过

本篇文章给大家带来的内容是关于js执行机制的概念?js的执行机制的实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在实际开发中,总是遇到请求结束后,想要把请求得到数据赋值给某一个对象或者变量,如果没有在请求的回调函数中赋值,而是在请求语句下面赋值,我们会发现请求得到数据正常,但是赋值后的变量是undefined。这是为什么呢?
首先,我们要了解一个概念,就是同步与异步。众所周知,js是单线程语言,也就是说,js一次只能执行一个任务,如果有多个任务的话呢,那就按照任务的顺序依次执行。但是如果其中某一个任务耗费大量时间,比如陷入死循环,那么其他任务都不能执行,会造成浏览器无响应。那么js是如何解决的呢?那就是将任务分为同步和异步模式进行执行。同步如上,异步呢是指,拥有大于一个的回调函数,任务在执行结束时不是执行下一个任务而是执行回调函数,那么有人可能会有疑问,这样做与同步有什么区别呢?区别在于,后一个任务不用等前一个任务完全执行后再去执行。因此我们得到的程序执行顺序不是任务的排列顺序。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

setTimeout(function(){

    console.log('第一个延时调用');

});

console.log('哈哈哈');

new Promise(function(resolve){

    console.log('promise任务吗');

    resolve();

}).then(function(){

    console.log('回调函数???')

});

console.log('嘻嘻嘻');

setTimeout(function(){

    console.log('第二个延时调用');

});

登录后复制

执行结果是什么呢?
哈哈哈
promise任务吗
嘻嘻嘻
回调函数???

第一个延时调用
第二个延时调用
为什么是这样呢?为什么setTimeout会在最后才执行,明明是0ms啊。
是因为除了同步异步模式外,我们对任务还有进一步的划分,宏任务微任务
宏任务:包括整体代码script,setTimeout,setInterval
微任务:Promise,process.nextTick
在执行时,进入宏任务后,开始第一次循环,接着执行所有微任务,然后在进行宏任务的下次循环。
在上面代码中,进入宏任务,并将setTimeout注册为宏任务放入队列,接着执行哈哈哈,遇到new Promise 直接执行,回调函数放置微任务队列,接着执行嘻嘻嘻,第二个setTimeout如上。接着执行微任务,这里仅有嘻嘻嘻。最后进入下次宏任务。

相关推荐:

js执行机制实例详解

浅析JS执行机制

以上就是js执行机制的概念?js的执行机制的实现方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号