JavsScripe是一套非同步的、单执行绪(single-threaded)语言,任务与任务之间必须「排队」执行。为了避免任务塞车祸无限循环,设计者给出了呼叫堆叠(call stack)、事件循环(event loop)、回调储列(callback queue)与API等特性。
为了避免任务塞车、拖累效率等问题,JavsScripe将待命中的任务分为Sync与Async两大类。首先,须先了解Event loop的结构。
(示意图)
深入了解,可参考影片Stack and Queue。
JavsScripe本质为Sync,一次只能做一件事,使用的资料结构为 stack 堆叠(後进後出)。
如果用函式让他一直循环,到最後记忆体会满出来,出现Ranger Error,称做stack overflow。这与无穷回圈不太一样,无穷回圈只会卡住,不会出现错误讯息。
非JavsScripe内建语法如 setTimeout 的 callback 不会卡在 stack 区块里。
具体上,一开始会先在 stack 区块出现,接着瞬间丢给 Runtime(执行环境:浏览器或node) 执行,等设定的时间过了之後,接着来到 Queue 排队区(会按照顺序排列),最後等 stack 区块里的程序码跑完,setTimeout 的 callback 才会跑到 stack 区块执行结果。例:
console.log (1)
console.log (2)
setTimeout ( () => {console.log(4);}, 3000) //最快3秒後印出4
console.log (3) //最後印出 1, 2, 3, 4
<<: Swift纯Code之旅 Day29. 「新增闹钟功能(2) - 如何使用Delegate传值」
>>: Day24 - 针对 Metasploitable 3 进行渗透测试(5) - 认识 Meterpreter
替代user之中的roles显示 我们在昨天已经可以显示我们增加的使用,但是在检阅之中,并没有显示正...
云端魔法 今天会使用vscode,来建立AWS上的环境,以下架构图为主: 首先,开启VScode然後...
学习进度 资料结构 Stack Queue Android Studio Activity(Life...
1.取得型别echo gettype <?php // $[a-zA-Z][a-zA-Z0-9...
Jconsole介绍 Jconsole是一个JMX相容的监视工具。它使用Java虚拟机器的JMX机制...