你懂 JavaScript 嗎?#1 預備...GO!
08 Oct 2018這次鐵人賽的主題是「你懂 JavaScript 嗎?」,主要內容是「You Don’t Know JS」系列書的讀書筆記。
為什麼要讀這一系列的書呢?
由於近幾年的年度願望中都有「讀完 You Don’t Know JS 系列書」這一項(掩面),但苦於各種理由而導致進度嚴重落後(哭),那麼就讓我藉由這次鐵人賽一口氣讀完吧(握拳)!
在這裡引用書中的幾句話,勉勵我也勉勵各位讀者
不要停在「可以運作就好,但並非真正知道為何可行」的態度。踏向那崎嶇的「少有人走的路」,擁抱 JavaScript 的原貌,以及它能做到的事。只要擁有這種知識,就沒有無法理解的技巧、框架或是本週熱門流行詞的首字母縮寫。
所謂的「專業人員」,往往都是指能夠「製作產品」,像是解決問題、修 bug 等,而非理解和探究手上的工具。因此,這一系列的書將帶我們了解這個語言的運作細節,再將這些細節融入我們的思考方式和實際工作流程中。
一起來和我努力 30 天吧!
目錄
- #1 預備…GO!
導讀(Up & Going)
暖身 (๑•̀ㅂ•́)و✧
這部份的內容有…
型別與文法(Types & Grammar)
這部份會提到令人困惑的隱含式的強制轉型,在此會解答其運作方式和如何好好使用它。
這部份的內容有…
- #4 型別(Types)
- #5 值(Values)Part 1 - 陣列、字串、數字
- #6 值(Values)Part 2 - 特殊值
- #7 原生功能(Natives)
- #8 強制轉型(Coercion)
- #9 文法(Grammar)
範疇與閉包(Scope & Closures)
JavaScript 引擎會在執行程式前先做編譯,在編譯階段會處理變數和函式的宣告,因此也會帶出拉升、範疇等議題,最後會提到何謂閉包與其應用-模組。
這部份的內容有…
- #10 範疇(Scope)
- #11 語彙範疇(Lexical Scope)
- #12 函式範疇與區塊範疇(Function vs Block Scope)
- #13 拉升(Hoisting)
- #14 動態範疇(Dynamic Scope)
- #15 閉包(Closure)
this 與物件原型(this & Object Prototypes)
圖片來源:What is this meaning of this?
這部份會提到幾個概念:(1) this 是函式執行時所屬的物件,而 this 是在執行時期做繫結,其值和函式在哪裡被呼叫有關,在這裡會歸納如何辨識 this 的值的四個規則;(2) 物件原型是屬性的查找串鏈,類似語彙範疇查找變數的方式;(3) 行為委派,這是物件原型最常應用的地方。
這部份的內容有…
- #16 this
- #17 物件(Object)
- #18 簡易版物件導向概念
- #19 原型(Prototypes)
- #20 行為委派(Behavior Delegation)
- #21 ES6 Class
非同步處理與效能(Async & Performance)
這部份主要是為了開發者能產出合理且高效能的程式碼,因此會提到非同步處理的機制和模式,讓程式碼能更好撰寫、更好維護、更好推理和有更佳的效能,例如:callback、promise、generator。最後會談到如何使用 web worker、SIMD 等達到資料的平行處理,與如何做效能最佳化,讓我們的程式不僅僅是能運作而已,而且是能夠運作得很好。
這部份的內容有…
- #22 非同步:現在和以後
- #23 Callback
- #24 Promise
- #25 產生器(Generator)
- #26 程式效能(Program Performance)
- #27 基準化分析與微調(Benchmarking & Tuning)- 使用 Benchmark.js 和 jsPerf 分析程式碼效能
ES6 與未來發展(ES6 & Beyond)
關注 ES6、ES7 甚至後續版本,不斷前進!
這部份的內容有…
- #28 ES? 現在 vs 未來
- #29 語法(Syntax)
- #30 總結
鐵人賽後…並非結束,而是新的開始…
- #31 組織功能(Organization)
- #32 非同步流程控制(Async Flow Control)
- #33 群集(Collections)
- #34 API 新增功能(API Additions)
- #35 Meta Programming(Meta Programming)
- #36 超越 ES6(Beyond ES6)
尚未補上連結的部份,我會繼續補上。
鐵人團隊介紹
大家好,我們是「武裝狗狗」!
p.s. 為何會取這個名字團員們也很困惑,可能是因為剛好用了某個「產生器」隨意轉了個覺得還可以的名字就報隊了吧!
成員如下(按字母順序排列)
- Hunter - 用 Nuxt.js 2.0, Vuetify, Storybook, Firebase 建一個 Blog
- Summer - 你懂 JavaScript 嗎?
- Yvonne - React 30 天
歡迎大家閱讀我們的學習歷程,也請不吝指教!
同步發表於2019 鐵人賽。