了解這33個JAVAScript概念絕對會讓你將來的職業生涯受益無窮。
話不多說,直接進入主題!
1. 調用棧
調用棧是解釋器(如web瀏覽器中的JavaScript解釋器)跟蹤其在調用多個函數的腳本中的位置的機制——當前正在運行什么函數以及從函數中又調用了哪些函數等。
2. 原始類型(Primitive Types)
除了對象之外的所有類型都定義了不可變的值(即不能更改的值)。例如(不同于C語言),字符串是不可變的。我們將這些類型的值稱為“原始值”。
3. 值類型和引用類型
分配了非原始值的變量將獲得對該值的引用。引用指向對象在內存中的地址。變量實際上并不包含值。
4. 隱式、顯式、標稱、結構化和鴨子類型
類型強制意味著當運算符的操作數是不同的類型時,其中一個將被轉換為另一個操作數類型的“等價”值。
5. == 和 === 和 typeof
JavaScript有兩種看上去相似、但實際大相徑庭的方法可用于測試相等性。那就是==和===。
6. 函數作用域、塊作用域和詞法作用域
詞法作用域:定義在詞法階段的作用域。是由你在寫代碼時將變量和塊作用域寫在哪里來決定的。
函數作用域:屬于這個函數的全部變量都可以在整個函數的范圍內使用(事實上也可用于嵌套的作用域)。
7. 表達式與語句
表達式可以像語句一樣工作,這就是我們也有Expression語句的原因。但是,另一方面,語句不能像表達式那樣工作。
8. IIFE、模塊和命名空間
常用的函數編碼模式有一個花哨的名字:Immediately-invoked Function Expression(立即調用函數表達式)。或者更廣為人知的是被寫作IIFE。
9. 消息隊列和事件循環
問:JavaScript如何異步和單線程?
答:JavaScript語言是單線程的,異步行為不是JavaScript語言本身的一部分,而是構建在瀏覽器(或編程環境)中的核心JavaScript語言之上,并通過瀏覽器API訪問。
10. setTimeout、setInterval和requestAnimationFrame
我們可以決定現在不執行函數,而在以后的某個時間執行。
11. JavaScript引擎
在寫JS代碼有時感覺有點神奇,因為開發人員編寫的一系列字符就像魔術一樣,在瀏覽器中變成具體的圖像、文字和動作。
這一切都是由JS引擎在背后默默地支持著。
12. 位運算符、類型數組和數組緩沖區
好的,從技術上講,對于計算機來說,一切都歸結為1和0。因為計算機不使用數字,也不使用字符或字符串,它只使用二進制數字(位)。即一切都以二進制形式進行存儲。然后計算機使用UTF-8等編碼將保存的位組合映射到字符、數字或不同的符號(ELI5版本)。
13. DOM和布局樹
文檔對象模型,通常稱為DOM,是使網站具有交互性的重要部分。它是一個界面,允許編程語言操縱網站的內容、結構和風格。JavaScript是連接到Inte.NET瀏覽器DOM的客戶端腳本語言。
14. 工廠和類
JavaScript是基于原型的語言,意味著可以通過具有克隆和擴展能力的通用對象來共享對象屬性和方法。這稱為原型繼承,與類繼承不同。
15. this、call、Apply和bind
這些函數對每個JavaScript開發人員都非常重要,因為幾乎每個JavaScript庫或框架中都會用到。
16.new、Constructor、instanceof和Instances
每個JavaScript對象都有一個原型。JavaScript中的所有對象都從其原型繼承其方法和屬性。
17. 原型繼承和原型鏈
JavaScript對于學習基于類的語言(如Java或C++)的開發人員來說有點困惑,因為它是動態的并且本身不提供類實現(class關鍵字由ES2015引入,但卻是語法糖,JavaScript仍然基于原型)。
18. Object.create和Object.assign
Object.create方法是在JavaScript中創建新對象的方法之一。
19. map,reduce,filter
即使你不知道什么是函數式編程,也可能一直在使用map、filter和reduce。它們非常有用,可幫助編寫更清晰的邏輯。
20. 純函數、函數副作用、狀態突變和事件傳播
我們的許多錯誤都植根于IO相關、數據突變、帶有副作用的代碼,然后在代碼庫中蔓延——從接受用戶輸入、通過http調用接收意外響應或寫入到文件系統。不幸的是,這是一個我們不得不習慣的殘酷現實。
21. 閉包
閉包是將(封閉的)函數與對其周圍狀態(詞法環境)的引用捆綁在一起的組合。換句話說,閉包使你可以從內部函數訪問外部函數的范圍。在JavaScript中,每次創建函數的同時都會創建閉包。
22. 高階函數
JavaScript可以接受高階函數。這種處理高階函數的能力以及其他特性使JavaScript成為非常適合函數式編程的編程語言之一。
23. 遞歸
可以擴展你對函數式編程的理解。
24. 集合與生成器
生成器函數返回Generator對象,同時符合可迭代協議和迭代器協議。
25. Promise
Promise對象表示異步操作的最終完成(或失敗)及其結果值。
26. async/await
async/await是一種可以以更舒適的方式處理Promise的特殊語法。非常容易理解和使用。
27. 數據結構
JavaScript每天都在發展。隨著React、Angular、Vue、NodeJS、Electron、React Native等框架和平臺的快速增長,將JavaScript用于大型應用程序已變得相當普遍。
28. 昂貴的運算和Big O標記法
“什么是Big O標記法?”這是一個非常常見的開發面試問題。簡而言之就是算法運行時間取決于輸入時間的數學表達式,通常談論最壞的情況。
29. 算法
在數學和計算機科學中,算法是有明確定義的指令的有限序列,通常用于解決一類特定問題或執行計算。
30. 繼承、多態和代碼重用
類繼承是一個類擴展另一個類的一種方式,因此我們可以在現有基礎上創建新功能。
31. 設計模式
每個開發人員致力于編寫可維護、可讀和可重用的代碼。隨著應用程序變得越來越大,代碼結構變得越來越重要。設計模式被證明是解決這一挑戰的關鍵——為特定情況下的常見問題提供組織化的結構。
32. 部分應用、Currying、Compose和Pipe
函數組合是一種組合多個簡單函數以構建更復雜函數的機制。
33. 干凈的代碼
編寫干凈、可理解和可維護的代碼是每個開發人員都必須掌握的一項技能。