function eatBreakfast () { console.log('吃早餐');}function washingPlate () { console.log('洗餐盘');}function callSomeone (someone) { console.log('打给' + someone); setTimeout(function () { console.log(someone + '回电'); }, 3000);}function doWork () { var auntie = '水阿姨'; eatBreakfast(); callSomeone(auntie); washingPlate();}doWork();
上面这个範例可以一次了解到执行绪与同步、非同步的概念
让我们来解析一下他的程式码吧:
Javascript 是单执行绪的程式
单执行绪 是一种作业系统的运行概念,一次只能做一件事。
如图所示,小明一次只能做一件事,等到做完以后才能按照顺序做下一件事。
相对的,多执行绪 的概念就是可以同时执行上述的三件事情
但可以看到 打给漂亮阿姨 这段有 setTimeout
的非同步事件
Javascript 同步、非同步
非同步的任务会先移动到 事件伫列(Event Queue) 中,等到所有的同步事件执行完之后,才会执行非同步。
这里我们使用执行堆叠的概念来看一下这段程式码的运作方式
非同步事件整理
setTimeout
只会执行一次就结束setInterval
会在间隔固定的时间不断重複使用者触发的行为也算是非同步事件:
<body><p>点我</p><script> function clickThis () { console.log('click'); } var dom = document.querySelector('p'); dom.addEventListener('click', clickThis, false);</script> </body>
除了使用者互动之外,还有三件事会用到非同步:
网路请求 (eg. ajax)档案系统操作 (读取/ 写入档案等)会故意延迟时间的功能 (eg. 闹钟)