實務上如何使用 Closure ?
Closure 是 ECMAScript 代表性功能,也是 Functional Programming 基礎,很多神妙的 FP 機制都是由 Closure 展開,善用 Closure 將使得程式碼更為精簡,可讀性更高,也更容易維護。
Closure 是 ECMAScript 代表性功能,也是 Functional Programming 基礎,很多神妙的 FP 機制都是由 Closure 展開,善用 Closure 將使得程式碼更為精簡,可讀性更高,也更容易維護。
Closure 是 ECMAScript 的一大特色,但由於對其不了解,因此很多人不敢使用 Closure;或者雖然會使用 Closure,但仍然對其原理一知半解。本文以 Runtime 角度深入探討 Closure 底層機制,讓我們徹底了解 Closure 的黑魔法。
若從其他程式語言跳來學習 ECMAScript,最不習慣應該就是 ECMAScript 有大量 Asynchronous 概念,如在 For Loop 中使用 setTimeout() 算是 ECMAScript 前十大坑之一。
Promise 有 Fulfilled Promise 與 Rejected Promise 兩種,其中 Fulfilled Promise 可由 Promise.resolve() 建立;而 Rejected Promise 則須由 Promise.reject() 或 Throw 建立。
實務上有些邏輯在 Fulfilled Promise 與 Rejected Promise 都需被執行,導致 Fulfilled Handler 與 Rejected Handler 都寫了一份,此時可使用 ECMAScript 2018 的 finally() 與 try catch finally,只需寫一份邏輯即可。
若為 Fulfilled Promise,我們可用 then() 或 await 去獲得 Synchronous 資料;但若為 Rejected Promise,則有 then()、catch() 或 try catch 三種處理方式。
ECMAScript 2015 的最大亮點之一就是提出 Promise 這種 未來值 概念避免 Callback Hell,先有 2015 的 then(),後有 2017 的 await,都可用來取得 Promise 內的 Synchronous 資料。
Fulfilled Promise 除了可由 Promise.resolve() 建立外,也可由 ECMAScript 2018 的 async 宣告,此外 Promise.resolve() 還能將 jQuery 的 Thenable Object 轉成真正的 Promise。
在 FP 我們會使用 Currying Function 取代傳統 Multiple Argument Function,但若回傳為 Promise,還能繼續使用 Currying 嗎 ?
ECMAScript 5 的 Property Accessor 提供了 Bracket Notation 可使用 [] 存取 Property,這使得 Property 可以使用 Variable;而 ECMAScript 2015 更加碼提供 Computed Property Name,讓我們在建立 Object 時就能使用 []。