10個JavaScript概念!Node.js程序員必須掌握
等你點藍字關注都等出蜘蛛網了
點擊播放 GIF/119K
摘要
病毒來了,程序員也要學習啊!何況你的電腦還沒中病毒!以JavaScript和V8引擎為核心,事件驅動架構和可擴展性開箱即用,Node.js已經快速成為創建Web應用和SaaS產品的新事實標準。許多框架,如Express,Sails和Socket.IO,使程序員能夠只關注業務邏輯,無需考慮其他問題。
當然,Node.js目前的普及度遠低於JavaScript。JavaScript支持許多不同風格的編程方式,包括函數式編程,程序編程和面向對象編程,它允許程序員靈活運用各種編程風格。
但JavaScript是把雙刃劍,JavaScript的多重性質意味著幾乎一切都是可變的。因此,在編寫Node.js代碼時,程序員無法清除對象和範圍突變的概率。因為JavaScript缺少尾調用優化(允許遞歸函數重用堆棧幀進行遞歸調用),所以使用遞歸進行大量迭代是很危險的。除了這些陷阱之外,Node.js是單線程的,因此開發人員必須編寫非同步代碼。
下面我將分享編寫高效和可擴展Node.js代碼最重要的10個JavaScript概念:
1
立即調用函數表達式
一個立即調用的函數表達式(IIFE)是一個在創建時可立即執行的函數。它與任何事件或非同步執行無關。您可以定義一個IIFE,如下所示:
第一對括弧function(){...}將括弧內的代碼轉換為表達式。第二對括弧調用表達式生成的函數。IIFE也可以被描述為一個自我調用的匿名函數,最常見的用法是限制通過var或者封裝上下文變數的範圍,以避免名稱衝突。
2
閉包
JavaScript中的閉包是內部函數,即使在外部函數返回控制項後也可以訪問其外部函數的作用域。閉包使內部函數的變數為私有,一個簡單例子如下所示:
count變數分配了一個外部函數,外部函數只運行一次,將計數器設置為零並返回內部函數。 _counter變數只能由內部函數訪問,這樣就可以像私有變數一樣運行。
3
Prototype
每個JavaScript函數都有一個用於附加屬性和方法的prototype,此屬性不可枚舉,它允許程序員將方法或成員函數附加到其對象。JavaScript僅通過prototype屬性支持繼承。在繼承對象的情況下,prototype指向父對象,將方法附加到函數的常見方法是使用prototype,如下所示:
4
私有屬性,使用閉包
JavaScript允許程序員使用下劃線前綴定義私有屬性,如上述示例所示。但這可能妨礙用戶直接訪問或修改私有屬性。使用閉包定義私有屬性將解決這個問題,在對象本身上定義需要訪問私有屬性的成員函數,可以使用閉包製作私有屬性,如下所示:
5
Module模式
Module模式是JavaScript中最常用的設計模式,用於實現鬆散耦合,結構良好的代碼。 它允許程序員創建公共和私有兩種訪問級別,實現Module模式的一種方式如下所示:
Revealing Module模式類似於Module模式,上述示例使用Revealing Module模式編寫如下:
6
Hoisting
在代碼執行之前,JavaScript將變數和函數聲明移動到其範圍頂部。無論程序員將代碼中的函數和變數聲明放在哪裡,它們都將由解釋器移動到其範圍的頂部。這可能是好的,也可能不是。
在執行任何代碼之前先處理變數聲明。具有諷刺意味的是,未聲明的變數在賦予值之前不存在,這將導致所有未聲明的變數成為全局變數,雖然函數聲明已經懸掛,但函數表達式未被懸停。提升變數和函數時,JavaScript具有優先順序。優先順序從上到下依次是可變分配、函數聲明、變數聲明。為了避免錯誤,程序員應該在每個範圍的開始處聲明變數和函數。
7
Currying
Currying是使函數更靈活的方法。使用curried函數,程序員可以傳遞函數期望的所有參數並獲取結果,或者只傳遞部分參數,並接收等待其餘參數。一個簡單例子如下:
原始功能可以直接將參數逐個傳遞給一個單獨的括弧,如下所示:
8
apply,call和bind方法
任何JavaScript程序員必須了解apply,call和bind之間的區別。這三個函數是相似的,因為它們的第一個參數始終要給出調用該方法函數的「this」值或上下文。三個之中,call最簡單,它與調用函數上下文相同。以下是一個例子:
apply幾乎和call一樣。唯一的區別是將參數作為數組傳遞,而不是單獨傳遞。數組在JavaScript中更容易操作,為處理函數打開了更多可能性。以下是使用apply和call的示例:
bind方法允許將參數傳遞給函數而不調用。返回一個新的函數,其中的參數在任何其他參數前面都是有界限的。例子如下:
9
Memoization
Memoization是一種優化技術,可以加快函數執行,並在再次發生同一組輸入時返回緩存的結果。JavaScript對象的行為就像關聯數組,使JavaScript易於記憶。例如,我們可以將遞歸階乘函數轉換成一個記憶的階乘函數,如下所示:
10
方法重載
方法重載允許多個方法具有相同的名稱但不同的參數。編譯器或解釋器根據傳遞的參數數量確定要調用的函數。JavaScript不直接支持方法重載。但是你可以像下面所示完成一些事情:
當你足夠了解Node.js,你會發現很多方法可以解決幾乎遇到的所有問題,但一定要採取正確的做法,不然很可能要重寫整個邏輯。本文中的10個JavaScript概念是每個Node.js開發人員應該知道的基礎知識。但只是冰山一角,希望程序員們可以持續學習。
END
閑扯技術圈二三事
關注技術宅的日常
IT168文庫
掃描上方二維碼關注
IT168文庫|中國最專業的IT文檔分享平台,擁有百萬活躍的IT技術精英!我們致力於有效幫助IT人士提升職業素養。
※ui 設計中的插畫與情感化設計
※快速學會SVN的搭建和使用
※大白話解釋 Git和GitHub
※AI取代人類前孩子的教育需要什麼改變?
TAG:優才學院 |
※win10 uwp教你使用 asp dotnet core 做 cs 程序
※開獎+小程序抽籤丨Nigel Sylvester x Air Jordan 1
※Stack Overflow十萬程序員大調查:最想學Python,93%是「直的」
※Spring Boot入門:第一個Spring Boot程序
※開獎+小程序抽籤丨Nike Air Jordan 1 「Court Purple」
※Under Armour將裁員400人;傳Saint Laurent與現任創意總監續約;耐克上線全球首個會員小程序
※Web Security事件發酵,Mozilla移除23個可疑插件程序
※微軟Mixed Reality將支持Win32程序
※Google Podcasts vs.Pocket Casts 哪個播客應用程序適合你?
※Android&Linux&Windows三平台通用實用程序推薦
※第三方Windows 10音量控制應用程序EarTrumpet發布
※Linux應用程序將支持18款Chromebook
※Off-White? x Nike Air Force 1 小程序發售通道開啟
※Playstation 4 加推 iOS 平台 Remote Play 應用程序
※Microsoft拖放文件支持更新Office,OneDrive iOS應用程序
※Google Fuchsia操作系統可執行Android程序
※Win7解決werfault.exe應用程序錯誤方法
※Google Play去年下架了70多萬個惡意Android應用程序
※10年 Windows與Linux 程序員的區別
※開獎+小程序抽籤丨 Air Jordan 1「No L』s」系列「Varsity Red」配色