不僅僅是面試,JavaScript 開發(fā)者都應該知道的十個概念
現(xiàn)在學習 JavaScript 和 Web 開發(fā)的人很多,他們都希望能憑此獲得一份工作。然而,自學常常會使學習者對 JavaScript 語言本身的理解存在知識盲點。
實際上,令人感到驚訝的是,他們只需要掌握很少的語言知識就能制作復雜的網(wǎng)頁,然而這樣通常不能很好掌握 JavaScript 的基礎知識。
使用基本的技能來實現(xiàn)功能和避免復雜的需求是相當容易的,通過依賴 Stack Overflow,而不理解復制來的代碼以創(chuàng)建一個網(wǎng)站也是十分容易。
面試但問題是,許多技術公司在面試中提問時,目的是檢驗你對 JavaScript 是否真正理解。當求職者只是對 JavaScript 有淺顯的認識,而不是深刻理解這門語言,面試官會很快清楚是什么情況。
下面是一些 Web 開發(fā)面試中常見的概念。當然,我們假設你已經(jīng)熟知諸如循環(huán)、函數(shù)和回調(diào)這些基本概念。
概念 1. 原始值和引用值(Value vs. Reference)理解對象、數(shù)組和函數(shù)是如何復制和傳遞到函數(shù)中的。了解引用值是被復制了什么,理解原始值是通過復制值來進行復制和傳遞的。
2. 域(Scope)理解全局域、函數(shù)域以及塊級作用域之間的區(qū)別。了解變量在哪里是可用的,了解 JavaScript 引擎如何執(zhí)行變量查找。
3. 提升(Hoisting)認識到變量和函數(shù)的聲明會被提升到聲明所在的上下文,即在變量的作用域內(nèi),不管變量在何處聲明,都會被提升到作用域的頂部,但是變量初始化的順序不變。認識到函數(shù)表達式不會被提升。
4. 閉包(Closures)認識到一個函數(shù)會保留對在其內(nèi)部創(chuàng)建的域的訪問,認識到這些可以讓我們做什么,例如數(shù)據(jù)隱藏、內(nèi)存化以及動態(tài)函數(shù)生成。
5. this理解 this 綁定的規(guī)則。知道它的工作機制,知道在函數(shù)中如何判斷它等同于什么,并且認識到為什么它是有用的。
6. new認識到它如何與面向對象編程產(chǎn)生聯(lián)系。了解通過 new 調(diào)用的函數(shù)會發(fā)生什么。理解通過使用 new 來自函數(shù) prototype 屬性的 繼承 的對象是如何生成的。
7. apply , call , bind了解這些函數(shù)是如何工作的,了解如何使用它們。了解它們對 this 做了什么。
8. 原型和繼承(Prototypes & Inheritance)理解 JavaScript 中的繼承通過 [[Prototype]] 鏈進行工作。理解如何通過函數(shù)和對象設置繼承,以及 new 是如何幫助我們實現(xiàn)的。了解 __proto__ 和 prototype 屬性是什么,以及它們的作用。
9. 異步 JS(Asynchronous JS)理解事件循環(huán),理解瀏覽器是如何處理用戶輸入、Web 請求和一般事件的。知道如何識別并正確實現(xiàn)異步代碼。理解 JavaScript 中異步和單線程分別是怎樣的。.
10. 高階函數(shù)(Higher Order Functions)理解這些函數(shù)是 JavaScript 中的第一類對象以及這意味著什么,了解從另一個函數(shù)返回函數(shù)是完全合法的。了解閉包和高階函數(shù)允許我們使用的技術。
大家還有什么補充的嗎,在評論區(qū)和大家分享吧~
來自:https://my.oschina.net/editorial-story/blog/1529543
