[学习笔记] Javascript 的同步(synchronous)与非同步(asynchronous) 和 Event

本篇参考连结
PJCHENder笔记

Synchronous vs Asynchronous

Definition

Synchronous 同步 : 也就是程式会逐行执行, 一次只会执行一行程式.Asynchronous 非同步 : 程式可能同时执行不只一行程式.

一般来说, JavaScript Engine 是以 Synchronous 来执行的, 但在浏览网页时, 也是需要随时监听一些 DOM 事件, 例如侦测滑鼠的点击, 滑动等这类的非同步呼叫( asynchronous callback ). 首先必须注意, JavaScript Engine 在浏览网页的过程中只是其中一部分, 其他还包含像是 Render Engine 和 http request. 也就是说, 整个网页执行的过程中, 可以是非同步的, 但单就 JavaScript Engine 而言, 还是以同步来逐行执行.

The Browser
图片截自:[Udemy] JavaScript: Understanding the weird parts

Asynchronous Callback

JavaScript Engine 执行 Async Callback 的流程是先把所有 Execution Context 的内容执行完毕后, 才会执行 Event Queue 里面的 callback.

/*Copy from JavaScript: Understanding the weird part*/function waitThreeSeconds(){ var ms = 3000 + new Date().getTime(); while(new Date() < ms){} console.log("finished function");}function clickHandler(){ console.log("click event!");}document.addEventListener('click', clickHandler);console.log("started execution");waitThreeSeconds();console.log("finished execution");

首先有建立函式 waitThreeSeconds(), 会让网页等待三秒后, 回在 console 出现 "finshed function" . 再沿着往下执行会看到有添加 Event Listener, 用来监听 Click的 Event, 并当事件触发时, 会执行 callback function clickHandler.

在执行时候, 会先点击滑鼠几下, 然后来看最后的结果.
Test Emulator

"started execution"
"finished function" // 网页停滞三秒后
"finished execution"
"click event!"

由上面的範例可以发现, 程式会先把所有程式跑完, 才会去执行 Event Queue 里面的 callback. 所以虽然一开始就点击滑鼠, 但 "click event!" 却是最后才出现.


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章