JavaScript运行机制(堆、栈、消息队列)
来源:互联网 发布:p2p网络借贷现状与前景 编辑:程序博客网 时间:2024/06/05 15:49
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop
栈
JavaScript是单线程语言,主线程执行同步代码。
函数调用时, 便会在内存形成了一个“调用记录”, 又称“调用帧”, 保存调用位置和内部变量等信息。 如果函数内部还调用了其他函数,那么在调用记录上方又会形成一个调用记录, 所有的调用记录就形成一个“调用栈”。
(尾调用、尾递归优化)
堆
对象被分配在一个堆中,一个用以表示一个内存中大的未被组织的区域。
消息队列与事件循环Event Loop
一个 JavaScript 运行时包含了一个待处理的消息队列(异步任务),(内部是不进入主线程,而进入”任务队列”(task queue)的任务。比如UI事件、ajax网络请求、定时器setTimeout和setInterval等。
每一个消息都与一个函数(回调函数callback)相关联。当栈为空时,从队列中取出一个消息进行处理。这个处理过程包含了调用与这个消息相关联的函数(以及因而创建了一个初始堆栈帧)。当栈再次为空的时候,也就意味着消息处理结束。
这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)。
小结
JS是单线程, 主线程执行同步代码, 事件、I/O操作等异步任务,将会进入任务队列执行,异步执行有结果之后,就会变为等待状态, 形成一个先进先出的执行栈,主线程的同步代码执行完之后,再从”任务队列”中读取事件, 执行事件异步任务的回调。
这就是为什么执行顺序是, 同步 > 异步 > 回调
更简单的说:只要主线程空了(同步),就会去读取”任务队列”(异步),这就是JavaScript的运行机制。
- JavaScript运行机制(堆、栈、消息队列)
- JavaScript运行机制 消息队列 --学习篇
- javaScript Core -- 运行机制:单线程&&任务队列
- 队列、栈(堆栈)、堆
- 一个快速的消息队列(最大堆)
- javascript 运行机制
- Javascript - 运行机制
- JavaScript 运行机制
- javascript运行机制
- Android 消息机制--Handler运行机制(一)
- 哈希表、堆、栈、队列
- 堆与栈 队列
- C++栈、堆、队列
- 堆、栈与队列
- 堆、栈与队列
- 栈,堆,队列
- 总结: 堆、栈、队列
- 优先队列(堆)
- Info Package ABAP routine
- 构建基于Chromium的应用程序
- 驱动程序调试(四)————修改内核来定位系统僵死问题(例:死循环)
- MFC皮肤库的使用
- php字符串及单引号和双引号的区别
- JavaScript运行机制(堆、栈、消息队列)
- border-style之double实现三道杠
- hadoop fs -mkdir input 报错: No such file or directory
- C#调用EasyPusher推送到EasyDarwin实现视频流中转
- 程序媛的前端感悟
- 判断IP是否合法
- js导出Excel
- debian6启动脚本详解
- Maven最佳实践:划分模块