<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          36個(gè)助你成為專家需要掌握的JavaScript概念

          共 8658字,需瀏覽 18分鐘

           ·

          2020-08-03 13:41


          英文 |?https://medium.com/better-programming/36-javascript-concepts-you-need-to-master-to-become-an-expert-c6630ac41bf4
          譯文 |?https://whyour.cn/post/36-javascript-concepts-you-need.html


          你會聽到許多人抱怨JavaScript很奇怪,有時(shí)甚至毫無價(jià)值。人們這樣抱怨是因?yàn)樗麄儾涣私馐虑榈谋举|(zhì)。
          雖然我同意JavaScript中有些場景的處理方式不同,但這并不會使它變得奇怪,而是以它自己的方式變得很漂亮。
          要開始熱愛一門編程語言,你應(yīng)該從深入了解并逐個(gè)掌握它的概念開始。
          為了成為一個(gè)全面的JavaScript專家,下面有36個(gè)你需要掌握的JavaScript概念。
          雖然這是我最長的文章之一,但是我向你保證它是值得你去花時(shí)間看的。在此感謝Stephen和Leonardo提供的資源。
          參考資料在Leonardo的一個(gè)GitHub倉儲中(地址:https://github.com/leonardomso/33-js-concepts),其中包含了下面解釋的所有這些概念的學(xué)習(xí)材料。請花點(diǎn)時(shí)間理解下面提到的每一個(gè)概念。

          1、調(diào)用棧執(zhí)行

          每個(gè)人都聽說過Stack Overflow這個(gè)網(wǎng)站。但是你知道實(shí)際的堆棧溢出嗎?堆棧溢出是與調(diào)用堆棧的操作相關(guān)聯(lián)的錯(cuò)誤。
          通過理解堆棧調(diào)用,你將了解像JavaScript這樣的高級語言是如何執(zhí)行的。

          2、原始數(shù)據(jù)類型

          const foo = "bar";foo.length; // 3foo === "bar"; // true
          等等!
          當(dāng)你把字符串bar賦值給常量foo時(shí),foo是基本字符串類型。這是每個(gè)人都可以接受的。但是為什么可以訪問字符串類型的length屬性呢?
          是不是很奇怪。
          這個(gè)特性稱為自動(dòng)裝箱。在上面的示例中,JavaScript將常量包裝到一個(gè)臨時(shí)包裝器對象中,然后訪問該對象的length屬性。一旦這一步完成,對象將被安全地丟棄。
          通過深入了解基本數(shù)據(jù)類型,你將知道它們在二進(jìn)制表示之前是如何在內(nèi)存中存儲的。你也會知道這些“奇怪”的情況是如何發(fā)生的,以及它們背后的邏輯原因。

          3、值類型和引用類型

          最近,我對“通過引用傳遞”的概念在JavaScript中的工作方式有些困惑。雖然我知道C和Java等語言中“按引用傳遞”和“按值傳遞”的概念,但我不確定它在JavaScript中是如何工作的。
          你知道在JavaScript中,給一個(gè)變量賦一個(gè)非基本類型的值,實(shí)際上是賦了一個(gè)該值的引用嗎?引用指向了存儲值的內(nèi)存位置。
          var arr1 = [1,2,3];var arr2 = arr1;arr2.push(10);console.log(arr2);//[1, 2, 3, 10]console.log(arr1);//[1, 2, 3, 10]
          正如你從上面的示例中看到的,對arr2所做的任何修改也將反映在arr1上。這是因?yàn)樗鼈冎怀钟袑χ档囊茫皇菍?shí)際值本身。
          通過理解值類型和引用類型的概念,你將更好地理解變量是如何分配值和內(nèi)存引用的。

          4、強(qiáng)制類型轉(zhuǎn)換

          這一概念主要解釋了隱式和顯式強(qiáng)制類型轉(zhuǎn)換的區(qū)別。這是在用JavaScript時(shí)會出錯(cuò)的少數(shù)領(lǐng)域之一。對于隱式類型轉(zhuǎn)換的概念尤其如此,因?yàn)閷τ诓煌臄?shù)據(jù)類型,它的行為方式不同。
          這是JavaScript面試中最常被面到的內(nèi)容之一。
          Number('789') // 顯式轉(zhuǎn)換+'789' // 隱式轉(zhuǎn)換789 != '456' // 隱式轉(zhuǎn)換9 > '5' // 隱式轉(zhuǎn)換10/null // 隱式轉(zhuǎn)換true | 0 // 隱式轉(zhuǎn)換
          通過清楚地理解類型轉(zhuǎn)換,那你已經(jīng)了解了JavaScript最棘手的概念之一。

          5、相等比較和’ typeof '操作符

          這個(gè)概念基本上解釋了雙等號和三等號的使用,以及在何時(shí)為什么使用它們。盡管在表面上看它們是相同的,并且在大多數(shù)時(shí)候會得出相同的結(jié)果,但是如果你在不知情的情況下使用它們,它們可能會給你帶來意想不到的錯(cuò)誤。
          你還應(yīng)該能夠使用typeof操作符并知道輸出的可能性。但是當(dāng)有對象時(shí),它會讓人感到困惑。
          typeof 3 // "number"typeof "abc" // "string"typeof {} // "object"typeof true // "boolean"typeof undefined // "undefined"typeof function(){} // "function"typeof [] // "object"typeof null // "object"

          6、JavaScript作用域

          作用域是一個(gè)概念,我相信,它在你JS旅程的開始階段你就應(yīng)該了解他。根據(jù)Wissam的說法,作用域的簡單定義是,當(dāng)編譯器需要變量和函數(shù)時(shí),它就是查找這個(gè)變量和函數(shù)的地方。
          理解作用域?qū)⒃试S你更有效地使用JavaScript。你應(yīng)該了解全局作用域、塊和函數(shù)作用域,也稱為詞法作用域。
          JS作用域一開始可能會讓人很困惑,但是一旦你理解了它是如何工作的,使用它會非常令人興奮。

          7、語句和表達(dá)式

          這是JavaScript中的兩個(gè)主要語法類別。你應(yīng)該知道這兩者之間的區(qū)別以及語句是如何計(jì)算的。這將允許你全面了解代碼是如何被構(gòu)造成表達(dá)式和語句的。
          你會注意到,你的大部分代碼都是表達(dá)式,而相對而言,你使用的語句數(shù)量較少。你還可以避免由于不正確使用這兩種方法而導(dǎo)致的錯(cuò)誤。

          8、?立即調(diào)用函數(shù)表達(dá)式和模塊

          立即調(diào)用的函數(shù)表達(dá)式是定義后立即運(yùn)行的函數(shù)。它們主要用于避免污染全局作用域。
          后來,ES6模塊被引入,提供了一種避免全局作用域污染的標(biāo)準(zhǔn)方法,盡管有些人認(rèn)為它不是IIFEs的直接替代品。
          通過理解IIFEs和模塊,你在開發(fā)應(yīng)用程序中,可以遇到更少的由于全局作用域處理不當(dāng)而導(dǎo)致的錯(cuò)誤。然而,使用模塊,你可以做很多事情。

          9、?消息隊(duì)列和事件循環(huán)

          正如MDN文檔所說,JavaScript有一個(gè)基于事件循環(huán)的并發(fā)模型,它負(fù)責(zé)執(zhí)行代碼、收集和處理事件以及執(zhí)行排隊(duì)的子任務(wù)。這個(gè)模型與其他語言(如C和Java)中的模型有很大的不同。
          在上述并發(fā)模型中,消息隊(duì)列用于處理從最老的消息開始的消息。只要事件發(fā)生,并且有一個(gè)事件監(jiān)聽器監(jiān)聽它,消息就會被添加到隊(duì)列中。
          通過理解這些概念,你可以更好地理解JS在底層是如何工作的,以及如何解釋你的代碼。

          10、時(shí)間間隔

          要在JavaScript中調(diào)度一個(gè)調(diào)用或函數(shù),可以使用兩種方法。
          • setTimeout允許我們在特定的時(shí)間間隔后運(yùn)行函數(shù)一次。
          • setInterval允許我們重復(fù)運(yùn)行一個(gè)函數(shù),在特定的時(shí)間間隔后開始運(yùn)行,然后在該時(shí)間間隔內(nèi)連續(xù)重復(fù)運(yùn)行。
          這些與前面的消息隊(duì)列和事件處理程序的概念有些關(guān)聯(lián)。因此,通過理解時(shí)間間隔方法,我們可以理解它們是如何工作的,并在我們的用例中有效地使用它們。

          11、?JavaScript引擎

          我們現(xiàn)在正在深入研究JavaScript。JavaScript引擎是執(zhí)行JavaScript代碼的計(jì)算機(jī)程序或解釋器。JavaScript引擎可以用多種語言編寫。
          例如,驅(qū)動(dòng)Chrome瀏覽器的V8引擎是用c編寫的,而驅(qū)動(dòng)Firefox瀏覽器的SpiderMonkey引擎是用C和c編寫的。
          對于你來說,了解你正在使用的是哪個(gè)JavaScript引擎來編寫高效代碼是非常重要的。使用webview的移動(dòng)開發(fā)者應(yīng)該特別注意這一點(diǎn)。

          12、位操作

          這些操作將值視為位(0和1),而不是小數(shù)、十六進(jìn)制或八進(jìn)制數(shù)。位操作符在這種二進(jìn)制表示上執(zhí)行操作,但是它們返回標(biāo)準(zhǔn)的JavaScript數(shù)值。
          通常,你不會在代碼中使用這些操作,但它們確實(shí)有一些用例。可以使用它們查找偶數(shù)和奇數(shù)值、顏色轉(zhuǎn)換、顏色提取和配置標(biāo)志。
          通過徹底了解這些位操作,你可以很好地使用WebGL等技術(shù),因?yàn)樗S多像素操作。

          13、DOM和布局樹

          大多數(shù)人都聽說過文檔對象模型(DOM),但只有少數(shù)人深入了解它。你知道在瀏覽器中看到的不是DOM嗎?而是渲染樹,它實(shí)際上是DOM和CSSOM的組合。
          通過理解DOM的工作原理、結(jié)構(gòu)以及頁面的呈現(xiàn)方式,我們就能夠在JavaScript的幫助下動(dòng)態(tài)地操作web頁面。這對于確保我們的應(yīng)用程序具有高標(biāo)準(zhǔn)的性能尤為必要。

          14、類和工廠

          JavaScript不是面向?qū)ο蟮恼Z言。但是,為了模擬OOP屬性,使用了構(gòu)造函數(shù)。根據(jù)Tania的說法,“JavaScript中的類實(shí)際上并不提供額外的功能,通常被描述為在原型和繼承之上提供語法糖,因?yàn)樗鼈兲峁┝烁蓛簟⒏鼉?yōu)雅的語法。
          其他編程語言都使用類,所以JavaScript中的類語法使得開發(fā)人員在不同語言之間的轉(zhuǎn)換更加簡單。”
          工廠函數(shù)是一個(gè)不是類或構(gòu)造函數(shù)但是返回對象的函數(shù)。JS大師Eric Elliot說:“在JavaScript中,任何函數(shù)都可以返回一個(gè)新對象。當(dāng)它不是構(gòu)造函數(shù)或類時(shí),就稱為工廠函數(shù)。”
          你應(yīng)該對這兩個(gè)概念有很好的理解,特別是當(dāng)你開始開發(fā)規(guī)模較大的應(yīng)用程序時(shí)。

          15、"this"關(guān)鍵詞和,‘a(chǎn)pply’、'call’和’bind’方法

          我個(gè)人認(rèn)為,對于一個(gè)JS開發(fā)人員來說,理解this關(guān)鍵詞是至關(guān)重要的。如果你不能正確地理解它,稍后你的應(yīng)用程序?qū)龅礁鞣N問題。
          如果你對this關(guān)鍵字有很好的理解,那么你可以關(guān)注applycallbind方法。
          這些方法是調(diào)用具有適當(dāng)上下文的函數(shù)所必需的。在傳遞訪問這個(gè)的回調(diào)時(shí),你將特別需要bind方法。我是在幫助一個(gè)朋友調(diào)試他的代碼時(shí)學(xué)到這一點(diǎn)的!

          16、?構(gòu)造函數(shù)和’instanceOf’操作符

          構(gòu)造函數(shù)就像常規(guī)函數(shù)一樣。但是他們有很多不同之處。按照慣例,函數(shù)名以一個(gè)大寫字母開頭,并且只能用new操作符執(zhí)行。
          具有OOP背景的程序員應(yīng)該熟悉這個(gè)新關(guān)鍵字。
          要正確識別對象的類型,我們使用instanceOf操作符。簡單地說,它檢查一個(gè)對象是否是另一個(gè)對象的實(shí)例。
          這將幫助你理解對象如何相互繼承。繼承是通過原型實(shí)現(xiàn)的。

          17、原型

          這是JavaScript中最令人困惑的概念之一,即使對于有十年經(jīng)驗(yàn)的人來說也是如此。
          JavaScript中的原型是在對象之間共享公共功能的機(jī)制。JavaScript中幾乎所有的對象都是Object的實(shí)例。一個(gè)典型的對象繼承了Object.prototype中的所有屬性和方法。
          簡單地說,原型就是JavaScript對象從其繼承方法和屬性的對象。
          通過更好地理解原型,你可以構(gòu)建高效、快速的應(yīng)用程序。

          18、?用’new’、‘Object.create’、'Object.assign’創(chuàng)建對象

          用JavaScript創(chuàng)建對象有很多方法。但是有些人選擇Object.create而不是使用new關(guān)鍵詞是有原因的。
          當(dāng)用Object.create創(chuàng)建時(shí),你可以使用現(xiàn)有對象作為新創(chuàng)建對象的原型。這將允許重用現(xiàn)有對象的屬性和函數(shù),有點(diǎn)像OOP中的繼承概念。
          當(dāng)你使用Object.assign方法,則可以將可枚舉的自有屬性從一個(gè)或多個(gè)源對象復(fù)制到目標(biāo)對象。在這種情況下,目標(biāo)對象的原型不包含源對
          象的屬性。
          這是這兩種方法的主要區(qū)別。
          通過理解這三種創(chuàng)建對象的方法,你可以根據(jù)用例在應(yīng)用程序中適當(dāng)?shù)厥褂盟鼈儊韯?chuàng)建內(nèi)存效率高的程序。

          19、?‘map’, ‘filter’, 和’reduce’方法

          當(dāng)涉及到數(shù)組操作時(shí),這三種方法非常有用。它們可以在數(shù)組的原型中找到。
          如果你有一個(gè)數(shù)組,你想對每個(gè)元素做點(diǎn)什么,那么你可以使用map方法。
          如果你有一個(gè)數(shù)組,并且希望在每個(gè)元素上運(yùn)行一個(gè)條件,并獲取傳遞該條件的值,則可以使用filter方法。
          reduce方法對數(shù)組的所有元素執(zhí)行一個(gè)reducer函數(shù),最后返回一個(gè)值。一個(gè)完美的例子是獲取數(shù)組中所有元素的總和。
          let numbers = [1,2,3,4,5,6]const reduced = numbers.reduce((accumulator, currentValue) => accumulator + currentValue)console.log(reduced)// 21
          注意,以上三個(gè)方法不會改變原始數(shù)組的值。

          20、純函數(shù)、副作用和狀態(tài)變化

          這三個(gè)概念對于JavaScript開發(fā)人員非常重要。狀態(tài)變化對于使用React的開發(fā)人員尤其重要。
          純函數(shù)總是返回與提供的輸入一致的值,而不訪問或者改變其作用域以外的任何變量。這種類型的函數(shù)更容易閱讀、調(diào)試和測試。
          副作用是一段代碼,在不需要的情況下,一個(gè)變量被創(chuàng)建并在整個(gè)范圍內(nèi)可用。如果你的函數(shù)訪問作用域之外的變量,那么就會有一個(gè)副作用。
          狀態(tài)變化是指改變變量的值。如果你改變一個(gè)變量,根據(jù)它改變之前的值,它可能會影響其他函數(shù)。在react環(huán)境中,建議你不要改變你的狀態(tài)。這里有一個(gè)關(guān)于不變性很好的文章。

          21、閉包

          閉包很難理解。但是一旦理解了,你就會開始看到JavaScript的美了。網(wǎng)上有豐富的資源。只要確保你花時(shí)間學(xué)習(xí)閉包。
          閉包允許你在內(nèi)部作用域中訪問外部函數(shù)的作用域。每次創(chuàng)建函數(shù)時(shí),都會創(chuàng)建JavaScript閉包。
          了解應(yīng)該使用閉包的原因,以便更深入地理解它們。

          22、高階函數(shù)

          高階函數(shù)是以其他函數(shù)作為參數(shù)或返回函數(shù)的函數(shù)。高階函數(shù)讓合成釋放出最大的能量。你可以創(chuàng)建只處理一個(gè)任務(wù)的較小函數(shù),然后在這些較小函數(shù)的幫助下構(gòu)造復(fù)雜函數(shù)。這也會增加代碼的可重用性。
          這也減少了錯(cuò)誤,使我們的代碼更容易閱讀和理解。

          23、?遞歸

          遞歸是所有編程語言中的一個(gè)常見概念。簡單地說,遞歸就是把大問題分解成小問題的概念。
          實(shí)際上,這通常意味著編寫一個(gè)調(diào)用自身的函數(shù)。盡管遞歸可能是一個(gè)讓你頭疼的令人困惑的概念,但是通過大量的練習(xí),從一些小問題開始,你可以更好地理解它。
          但是要注意,如果不小心使用遞歸,可能會遇到堆棧溢出錯(cuò)誤。作為練習(xí),對這個(gè)錯(cuò)誤做一些研究。你需要修改關(guān)于第一個(gè)主題的知識,調(diào)用堆棧,以完全理解這個(gè)錯(cuò)誤的上下文。

          24、?集合和生成器函數(shù)

          集合和生成器函數(shù)是ES6中新引入的。新引入的集合是MapSetWeakSetWeakMap。這些集合為你提供了一些非常好的用例。你必須了解它們的用法,特別是使用現(xiàn)代JavaScript時(shí)。
          另一方面,生成器函數(shù)有時(shí)理解起來有點(diǎn)棘手,特別是對于初學(xué)者來說。
          生成器允許你編寫代碼函數(shù),使你能夠暫停和重新啟動(dòng)函數(shù),而不會阻塞其他代碼的執(zhí)行,這在JavaScript中是非常少見的。

          25、?Promises

          杰奎琳這樣解釋Promises: “想象你是一個(gè)孩子。你媽媽答應(yīng)你,她下星期會給你買一部新手機(jī)。”
          你要到下周才能知道你是否能拿到那部手機(jī)。你的媽媽要么真的給你買了一部全新的手機(jī),要么因?yàn)椴婚_心而不買。
          這就是一個(gè)PromisePromise有三種狀態(tài)。它們是:
          • Pending: 你不知道你是否會得到那個(gè)電話。
          • Fulfilled: 媽媽很高興,她給你買了一個(gè)全新的手機(jī)。
          • Rejected: 媽媽不高興,她不給你買手機(jī)。
          到目前為止,這是我對Promise的最簡單、最清楚的解釋。老實(shí)說,我是在做演示項(xiàng)目時(shí)學(xué)到Promise的概念的。
          這讓我很難理解發(fā)生了什么,因?yàn)槲也恢?/span>Promise是什么。快進(jìn)到現(xiàn)在。由于網(wǎng)絡(luò)上豐富的資源,我對Promise有了更好的理解。結(jié)合我對項(xiàng)目的工作知識,我能夠有一個(gè)清晰的理解。

          26、?異步編程

          要理解什么是異步編程,我們首先應(yīng)該刷新同步編程的知識。同步編程是線程阻塞的,由于JavaScript是單線程的,所以代碼將逐行執(zhí)行。
          但是使用異步代碼,你可以在不阻塞主線程的情況下執(zhí)行長時(shí)間的網(wǎng)絡(luò)請求。當(dāng)你必須執(zhí)行多個(gè)需要很長時(shí)間才能完成的任務(wù)時(shí),這一點(diǎn)特別有用。
          但是在某些情況下,你可能需要阻塞線程,即使是對于一個(gè)很長的任務(wù)。此時(shí)你將使用async/await的概念。
          好好學(xué)習(xí)這些概念將允許你編寫高效執(zhí)行的程序,即使有很多運(yùn)行的任務(wù)。

          27、?ES6箭頭函數(shù)

          箭頭函數(shù)是ES6的一個(gè)附加功能,在語法上替代了常規(guī)函數(shù)。不同的是,箭頭函數(shù)不綁定到thisargumentssupernew.target關(guān)鍵詞。
          這使得箭頭在某些情況下是一個(gè)很好的選擇,但在另一些情況下則是一個(gè)很糟糕的選擇。
          因此,永遠(yuǎn)不要養(yǎng)成使用箭頭函數(shù)的習(xí)慣。根據(jù)你的用例實(shí)現(xiàn)它們。

          28、?數(shù)據(jù)結(jié)構(gòu)

          無論使用哪種編程語言,數(shù)據(jù)結(jié)構(gòu)都是開發(fā)人員應(yīng)該具備的基本知識之一。
          “糟糕的程序員擔(dān)心代碼。好的程序員擔(dān)心數(shù)據(jù)結(jié)構(gòu)和它們之間的關(guān)系。”
          linus Torvalds, Linux和Git的創(chuàng)建者
          通過深入了解不同的數(shù)據(jù)結(jié)構(gòu),你可以構(gòu)建在不同環(huán)境下運(yùn)行良好的高效程序。你應(yīng)該了解鏈表、隊(duì)列、堆棧、樹、圖和哈希表。

          29、?時(shí)間復(fù)雜度

          時(shí)間復(fù)雜度分析也是計(jì)算機(jī)編程的另一個(gè)基本原理,與編程語言無關(guān)。要構(gòu)建更好的應(yīng)用程序,你應(yīng)該編寫更好的解決方案。為了做到這一點(diǎn),你應(yīng)該理解時(shí)間復(fù)雜度的概念。它有時(shí)被稱為大O。
          大O符號描述了算法所需的執(zhí)行時(shí)間或使用的空間。大O符號專門描述了最壞的情況。
          這將允許你選擇并實(shí)現(xiàn)性能最好的算法,即使在最壞的情況下也是如此。

          30、算法

          這是你將在計(jì)算機(jī)科學(xué)課程中首先學(xué)到的東西之一。簡而言之,算法就是一個(gè)逐步實(shí)現(xiàn)目標(biāo)的過程。程序員應(yīng)該能夠從算法的角度來看待任何問題。
          他們應(yīng)該能夠逐步構(gòu)建問題和解決方案。這個(gè)算法就是你以后要寫的程序。
          盡管有成千上萬個(gè)用例的算法,其中兩個(gè)用例是相當(dāng)常見的:
          • 搜索
          • 排序
          這兩個(gè)用例對程序員來說是非常常見的,你至少應(yīng)該全面了解可供他們使用的已知算法。沒有固定的規(guī)則規(guī)定你應(yīng)該使用這些算法之一,但是這些算法在性能方面是眾所周知的,并且有很好的文檔證明。
          你甚至可以創(chuàng)建自己的算法,并將其介紹給世界。如果它比目前已知的算法更好,你可能會成為下一個(gè)編程明星!

          31、?繼承、多態(tài)和代碼重用

          JavaScript中的繼承與原型一起工作。這是因?yàn)镴avaScript是非面向?qū)ο蟮恼Z言。然而,JavaScript通過提供原型繼承來提供OOP的一些特性。
          另一方面,多態(tài)是對象、變量或函數(shù)可以采用多種形式的概念。在JavaScript中,要看到多態(tài)性的效果有點(diǎn)困難,因?yàn)樵陟o態(tài)類型的系統(tǒng)中,更典型的多態(tài)性類型更為明顯。
          以上兩個(gè)概念都可以幫助我們在JavaScript中實(shí)現(xiàn)代碼重用。對以上兩個(gè)概念有扎實(shí)的理解,特別是對JavaScript的理解,將允許你編寫高質(zhì)量和實(shí)用的代碼。

          32、設(shè)計(jì)模式

          在軟件工程中,設(shè)計(jì)模式是對常見問題的一個(gè)眾所周知的、可重復(fù)的解決方案。有幾種設(shè)計(jì)模式,每一種都有自己的用例。23 Gang of Four(GoF)模式通常被認(rèn)為是所有其他模式的基礎(chǔ)。要了解它們是相當(dāng)困難的,但是你至少可以嘗試?yán)斫馑鼈兊挠美?/span>
          下面是Felipe的一份很棒的倉儲,它用JavaScript實(shí)現(xiàn)了23種GoF模式。請瀏覽本文末尾提到的參考資料,熟悉Leonardo的一些很棒的資源,他是本文的靈感來源。

          33、?函數(shù)式編程

          根據(jù)Wiki,“函數(shù)式編程是一種編程范式,一種構(gòu)建計(jì)算機(jī)程序結(jié)構(gòu)和元素的風(fēng)格,它將計(jì)算視為數(shù)學(xué)函數(shù)的計(jì)算,并避免了狀態(tài)的變化和數(shù)據(jù)的變化。”
          有幾個(gè)概念的函數(shù)編程,你將需要掌握:
          • Pure functions
          • Immutability
          • Referential transparency
          • Higher-order functions
          理解函數(shù)式編程的這些概念肯定會讓你占上風(fēng)。

          34、干凈代碼的原則

          這是每個(gè)開發(fā)人員都應(yīng)該掌握的基本技能,無論使用哪種編程語言。每種編程語言都有一組單獨(dú)的好實(shí)踐。
          雖然這些“好的”實(shí)踐是主觀的,并且在不同的工作場所有所不同,但是有一些實(shí)踐是公認(rèn)的“好的”。
          通過遵循這些代碼原則,你可以確保你的代碼對每個(gè)人都是可讀的和可維護(hù)的。這將幫助你和你的團(tuán)隊(duì)在應(yīng)用程序開發(fā)期間順利地協(xié)同工作。

          35、解構(gòu)

          在ES6中引入了解構(gòu)操作符。它有相當(dāng)多的用例,你肯定應(yīng)該熟悉。對于相同的用例,它們比以前的實(shí)現(xiàn)更簡單、更有效。這也被稱為擴(kuò)展操作符。
          你可以在我的文章中閱讀更多關(guān)于解構(gòu)的內(nèi)容。

          36、ES2020新特性

          編程的美妙之處在于,如果不不斷學(xué)習(xí),就永遠(yuǎn)不可能成為編程語言的專家。編程語言會隨著時(shí)間不斷發(fā)展,因?yàn)槊總€(gè)主要版本都會引入更多的特性。
          這意味著你對某個(gè)概念的專業(yè)知識在未來10年內(nèi)將會過時(shí)或廢棄,因?yàn)闀懈玫奶娲桨赴殡S著版本更新發(fā)布。對于任何編程語言來說,這都是一個(gè)非常常見的場景。
          ES2020發(fā)布了幾個(gè)新特性,包括可選鏈接、nullish合并、動(dòng)態(tài)導(dǎo)入等等。為了跟上快速變化的IT世界,你必須學(xué)習(xí)這些新概念。你可以在我的博客中查看新發(fā)布的功能。
          掌握一門語言需要多年的經(jīng)驗(yàn)和時(shí)間,但是知道要掌握什么會讓事情變得更容易。
          請瀏覽下面提到的資源,找到上述36個(gè)概念的學(xué)習(xí)材料。這個(gè)Github倉儲是一個(gè)很好的起點(diǎn)。
          本文完~

          瀏覽 72
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆一级久久久 | 波多AV在线 | 91久久婷婷国产麻豆精品电影.co | 欧美午夜精品一区二区三区 | 91成人无码在线电影 |