Javascript 中你最應(yīng)該知道的 33 個(gè)概念

      網(wǎng)友投稿 787 2025-03-31

      你覺得自己對(duì)javaScript了解多少?你可能知道如何編寫函數(shù),理解簡(jiǎn)單的算法,甚至可以編寫類。但是你知道類型化數(shù)組是什么嗎?

      你現(xiàn)在不需要知道所有這些概念,但你最終會(huì)在以后的職業(yè)生涯中需要它們。這就是為什么我建議把這個(gè)列表起來(lái),因?yàn)槟憧赡軙?huì)遇到其中一個(gè),然后你會(huì)需要一個(gè)教程來(lái)完全理解它。

      我們歸納了 33 個(gè)前端開發(fā)者需要知道的 javaScript 核心概念。希望當(dāng)你不理解這些概念的時(shí)候能去看看它們?cè)敿?xì)的介紹(我們也在每個(gè)概念的末尾給出了詳細(xì)的介紹地址)。

      1. 調(diào)用堆棧

      調(diào)用棧是一種解釋器機(jī)制(就像網(wǎng)頁(yè)瀏覽器中的JavaScript解釋器),用來(lái)跟蹤它在調(diào)用多個(gè)函數(shù)的腳本中的位置——當(dāng)前正在運(yùn)行的函數(shù)以及在該函數(shù)中調(diào)用了哪些函數(shù)等等。

      詳細(xì): https://developer.mozilla.org/zh-CN/docs/Glossary/Call_stack

      2. 原始值

      除了對(duì)象之外,所有類型都定義了不可變值(即不能更改的值)。例如(與C不同),string是不可變的。我們將這些類型的值稱為“基本值”。

      詳細(xì): https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures#原始值

      3.值類型和引用類型

      賦值為非原始值的變量將被賦予該值的引用。該引用指向?qū)ο笤趦?nèi)存中的位置。變量實(shí)際上并不包含值。

      詳細(xì):https://juejin.cn/post/6844904198484541454

      4. 類型轉(zhuǎn)換

      類型強(qiáng)制意味著,當(dāng)操作符的操作數(shù)是不同類型時(shí),其中一個(gè)操作數(shù)將被轉(zhuǎn)換為另一個(gè)操作數(shù)類型的“等效”值。

      詳細(xì): https://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript

      5. 雙等號(hào)(==)和三等號(hào)(===)

      JavaScript有兩種看起來(lái)相似但又非常不同的方法來(lái)測(cè)試是否相等。可以用==或===來(lái)測(cè)試是否相等。

      詳細(xì):https://segmentfault.com/a/1190000013267129

      6. 函數(shù)作用域,塊作用域和詞法作用域

      在 ES5 及之前版本,JavaScript 只擁有函數(shù)作用域,沒有塊作用域(with和 try...catch 除外)。在 ES6 中,JS 引入了塊作用域,{ }內(nèi)是單獨(dú)的一個(gè)作用域。采用 let或者 const 聲明的變量會(huì)挾持所在塊的作用域,也就是說(shuō),這聲明關(guān)鍵字會(huì)將變量綁定到所在的任意作用域中(通常是 {...}內(nèi)部)。

      詳細(xì):https://segmentfault.com/a/1190000008440514

      7. 表達(dá)式和語(yǔ)句

      進(jìn)行這種區(qū)分很重要,因?yàn)楸磉_(dá)式可以像語(yǔ)句一樣工作,這就是為什么我們也有表達(dá)式語(yǔ)句。但是,在另一方面,語(yǔ)句不能像表達(dá)式那樣工作。

      詳細(xì):cnblogs.com/1549983239yifeng/p/14598951.html

      8. IIFE,模塊和命名空間

      一種常用的函數(shù)編碼模式有一個(gè)奇特的名字:立即調(diào)用函數(shù)表達(dá)式。或者更廣為人知的IIFE,發(fā)音為“iffy”。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Glossary/IIFE

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

      “異步JavaScript和單線程?”答案是JavaScript語(yǔ)言線程和異步行為不是JavaScript語(yǔ)言本身的一部分,而是建立在核心的瀏覽器中的JavaScript語(yǔ)言(或編程環(huán)境)和通過瀏覽器訪問api。

      詳細(xì):https://www.bbsmax.com/A/kjdwajrGJN/

      10. setTimeout, setInterval和requestAnimationFrame

      我們可能決定不立即執(zhí)行某個(gè)函數(shù),而是在以后的某個(gè)時(shí)間執(zhí)行。這就是所謂的“電話預(yù)約”。

      詳細(xì):https://www.cnblogs.com/ling-nl/p/14245218.html

      11. Javascript 引擎

      為Web編寫代碼有時(shí)感覺有點(diǎn)神奇,因?yàn)殚_發(fā)人員編寫了一系列字符,就像魔術(shù)一樣,這些字符在瀏覽器中變成了具體的圖像、文字和動(dòng)作。理解這種技術(shù)可以幫助開發(fā)人員更好地理解Javascript的運(yùn)行機(jī)制。

      JavaScript引擎的組成部分有哪些?

      編譯器。主要工作是將源代碼編譯成抽象語(yǔ)法樹,然后在某些引擎中還包含將抽象語(yǔ)法樹轉(zhuǎn)換成字節(jié)碼。

      解釋器。在某些引擎中,解釋器主要是接受字節(jié)碼,解釋執(zhí)行這個(gè)字節(jié)碼,然后也依賴來(lái)及回收機(jī)制等。

      JIT工具。一個(gè)能夠JIT的工具,將字節(jié)碼或者抽象語(yǔ)法樹轉(zhuǎn)換成本地代碼,當(dāng)然它也需要依賴?yán)斡浝厥掌骱头治龉ぞ?profiler)。它們負(fù)責(zé)垃圾回收和收集引擎中的信息,幫助改善引擎的性能和功效。

      詳細(xì):https://www.cnblogs.com/onepixel/p/5090799.html

      12. 位操作符,類型數(shù)組和數(shù)組緩沖區(qū)

      對(duì)于計(jì)算機(jī)來(lái)說(shuō),所有的都是1和0。它不操作數(shù)字、字符或字符串,它只使用二進(jìn)制數(shù)字(位)。簡(jiǎn)而言之,一切都是以二進(jìn)制形式存儲(chǔ)的。然后計(jì)算機(jī)使用諸如UTF-8這樣的編碼將保存的比特組合映射為字符、數(shù)字或不同的符號(hào)(ELI5版本)。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Expressions_and_Operators#位運(yùn)算符

      13. DOM 和 渲染樹

      文檔對(duì)象模型(Document Object Model),通常稱為DOM,是使網(wǎng)站具有交互性的重要組成部分。它是一個(gè)界面,允許編程語(yǔ)言操作網(wǎng)站的內(nèi)容、結(jié)構(gòu)和風(fēng)格。JavaScript是在internet瀏覽器中連接到DOM的客戶端腳本語(yǔ)言。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Web/Performance/How_browsers_work

      14. 原型繼承

      JavaScript是一種基于原型的語(yǔ)言,這意味著對(duì)象屬性和方法可以通過具有克隆和擴(kuò)展能力的通用對(duì)象來(lái)共享。這被稱為原型繼承,與類繼承不同。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/learn/javascript/objects/classes_in_javascript#原型式的繼承

      15. this, call, apply and bind

      這些函數(shù)對(duì)每個(gè)JavaScript開發(fā)人員都非常重要,幾乎在每個(gè)JavaScript庫(kù)或框架中都使用。

      詳細(xì):

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/this

      16. new、Constructor、instanceof和Instances

      每個(gè)JavaScript對(duì)象都有一個(gè)原型。JavaScript中的所有對(duì)象都從原型中繼承了它們的方法和屬性。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Object_prototypes

      17. 原型繼承和原型鏈

      對(duì)于使用基于類的語(yǔ)言(如Java或c++)的開發(fā)人員來(lái)說(shuō),JavaScript有點(diǎn)令人困惑,因?yàn)樗莿?dòng)態(tài)的,本身不提供類實(shí)現(xiàn)(class關(guān)鍵字是在ES2015中引入的,但它是語(yǔ)法上的糖,JavaScript仍然是基于原型的)。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

      18. Object.create 和 Object.assign

      對(duì)象。create方法是JavaScript中創(chuàng)建新對(duì)象的方法之一。

      詳細(xì):

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

      19. map, reduce 和 filter

      即使你不知道函數(shù)式編程是什么,你也可能使用過map、filter和reduce,因?yàn)樗鼈兎浅S杏茫梢宰屇憔帉懜逦倪壿嫞瑥亩屇愕拇a不那么糟糕。

      20. 純函數(shù),副作用,狀態(tài)突變和事件冒泡

      我們的很多bug都是源于IO相關(guān)的,數(shù)據(jù)突變,副作用。這些代碼遍布我們的代碼庫(kù)——比如接受用戶輸入,通過http調(diào)用接收意外響應(yīng),或者寫入文件系統(tǒng)。不幸的是,這是一個(gè)殘酷的現(xiàn)實(shí),我們應(yīng)該習(xí)慣處理這些bug。

      詳細(xì):https://segmentfault.com/a/1190000018524543

      21. 閉包

      閉包是將一個(gè)函數(shù)捆綁在一起(封裝在一起),并引用其周圍的狀態(tài)(詞法環(huán)境)的組合。換句話說(shuō),閉包使您能夠從內(nèi)部函數(shù)訪問外部函數(shù)的作用域。在JavaScript中,閉包是在每次創(chuàng)建函數(shù)時(shí)創(chuàng)建的。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

      22. 高階函數(shù)

      JavaScript可以接受高階函數(shù)。處理高階函數(shù)的能力以及其他特性使JavaScript成為非常適合函數(shù)式編程的編程語(yǔ)言之一。

      高階函數(shù)是至少滿足下面一個(gè)條件的函數(shù):

      接收一個(gè)或多個(gè)函數(shù)作為參數(shù)。比如filter函數(shù)

      返回一個(gè)函數(shù)。 比如bind函數(shù)

      詳細(xì):https://segmentfault.com/a/1190000018528025

      23. 遞歸

      一種函數(shù)調(diào)用自身的操作。遞歸被用于處理包含有更小的子問題的一類問題。一個(gè)遞歸函數(shù)可以接受兩個(gè)輸入?yún)?shù):一個(gè)最終狀態(tài)(終止遞歸)或一個(gè)遞歸狀態(tài)(繼續(xù)遞歸)。

      24. 集合和Generator

      Generator對(duì)象由Generator函數(shù)返回,它符合可迭代對(duì)象協(xié)議和迭代器協(xié)議。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Generator

      25. Promises

      Promise對(duì)象表示異步操作的最終完成(或失敗)及其結(jié)果值。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise

      26. async/await

      有一種特殊的語(yǔ)法以一種更舒適的方式處理承諾,稱為“async/await”。它非常容易理解和使用。

      await 操作符用于等待一個(gè)Promise 對(duì)象。它只能在異步函數(shù) async function中使用。

      詳細(xì):

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/async_function

      https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/await

      27. 數(shù)據(jù)結(jié)構(gòu)

      Javascript每天都在發(fā)展。隨著React、Angular、Vue、NodeJS、Electron、React Native等框架和平臺(tái)的快速發(fā)展,在大型應(yīng)用中使用javascript已經(jīng)變得非常普遍。

      JavaScript 語(yǔ)言中內(nèi)建的數(shù)據(jù)結(jié)構(gòu)及其屬性,它們可以用來(lái)構(gòu)建其他的數(shù)據(jù)結(jié)構(gòu)。

      詳細(xì):https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Data_structures

      28. 時(shí)間復(fù)雜度

      這是一個(gè)非常常見的面試問題。簡(jiǎn)而言之,它是算法運(yùn)行時(shí)間的數(shù)學(xué)表達(dá)式取決于輸入時(shí)間的長(zhǎng)短,通常談?wù)摰氖亲顗牡那闆r。

      29. 算法

      在數(shù)學(xué)和計(jì)算機(jī)科學(xué)中,算法是定義明確的指令的有限序列,通常用于解決一類特定的問題或執(zhí)行計(jì)算。

      詳細(xì):https://www.cnblogs.com/xinkuiwu/category/1594426.html

      30. 繼承、多態(tài)和重用

      類繼承是一個(gè)類擴(kuò)展另一個(gè)類的一種方式,因此我們可以在現(xiàn)有功能的基礎(chǔ)上創(chuàng)建新的功能。

      31. 設(shè)計(jì)模式

      每個(gè)開發(fā)人員都努力編寫可維護(hù)、可讀和可重用的代碼。隨著應(yīng)用程序變得越來(lái)越大,代碼結(jié)構(gòu)變得越來(lái)越重要。設(shè)計(jì)模式被證明是解決這一挑戰(zhàn)的關(guān)鍵——為特定環(huán)境中的常見問題提供組織結(jié)構(gòu)。

      32. 柯里化

      函數(shù)組合是將多個(gè)簡(jiǎn)單函數(shù)組合成一個(gè)更復(fù)雜函數(shù)的機(jī)制。

      Javascript 中你最應(yīng)該知道的 33 個(gè)概念

      詳細(xì):https://zhuanlan.zhihu.com/p/74585560

      33. Clean Code

      編寫干凈、可理解和可維護(hù)的代碼是每個(gè)開發(fā)人員都必須掌握的關(guān)鍵技能。

      詳細(xì):https://zhuanlan.zhihu.com/p/102367865

      JavaScript

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Excel自動(dòng)為該單元格所在行和列突出顯示顏色強(qiáng)調(diào)數(shù)據(jù)(excel中選中一個(gè)單元格后,行列跟著有顏色)
      下一篇:excel中怎樣將圖表嵌入到固定區(qū)域中
      相關(guān)文章
      风间由美在线亚洲一区| 亚洲人成电影在线观看青青| 亚洲风情亚Aⅴ在线发布| 亚洲精品国产精品国自产网站 | 亚洲福利视频一区二区三区| 久久精品国产亚洲AV无码娇色| 亚洲男人第一av网站| 久久91亚洲精品中文字幕| 亚洲va在线va天堂va不卡下载| 亚洲国产精品婷婷久久| 亚洲av无码无在线观看红杏| 亚洲av无码精品网站| 久久丫精品国产亚洲av不卡| 亚洲综合激情九月婷婷| 亚洲精品不卡视频| 亚洲fuli在线观看| 亚洲天然素人无码专区| 亚洲AV网一区二区三区| 亚洲?V乱码久久精品蜜桃| 亚洲一级片免费看| 国产成人亚洲综合无码精品| 亚洲激情在线观看| 亚洲小说图片视频| 一本天堂ⅴ无码亚洲道久久| jizzjizz亚洲日本少妇| 亚洲天堂中文字幕在线| 国产亚洲精品精华液| 亚洲一区二区三区夜色| 亚洲国产综合精品| 亚洲人成电影网站免费| 亚洲福利视频一区二区| 亚洲中文字幕无码日韩| 亚洲国产综合91精品麻豆| 亚洲天堂一区二区三区| 亚洲中文字幕久久精品蜜桃| 国产精品日本亚洲777| 国产偷国产偷亚洲清高动态图 | 亚洲av日韩专区在线观看| 亚洲国产免费综合| 亚洲AV中文无码字幕色三| 亚洲精品美女在线观看|