4 個 JavaScript 最基礎的問題 —— Eric Elliott
theme: smartblue
本篇參考:https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95
作者:Eric Elliott
持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第29天,點選檢視活動詳情
咱就是說,經常看技術部落格的同學應該熟悉 Eric Elliott 這位老哥,他致力於 JavaScript 程式設計、區塊鏈領域的技術博文輸出,在 medium 平臺上有 10w+ 粉絲。
本瓜發現,對於 JS 程式設計,這老哥有以下 2 個特點:
- 青睞函數語言程式設計;
- 排斥 class 類繼承,青睞基於原型繼承;
對於技術偏好,需辯證的看待。本篇就從他原本 10 個基礎面試問題中抽取其中 4 個還不錯的問題來看看~
按需所取,沖沖衝ヾ(◍°∇°◍)ノ゙
一、你能說出 JavaScript 的程式設計正規化嗎?
好的回答
首先要說出:JavaScript 是一門多正規化語言!支援面向過程(命令式)、面向物件(OOP)和函數語言程式設計(宣告式)。
其次,最重要的是說出:JavaScript 是通過原型繼承(OLOO-物件委託)來實現面向物件(OOP)的;
如果還能說出以下,就更棒了:JavaScript 通過閉包、函式是一等公民、lambda 運算來實現函數語言程式設計的。
如果再進一步,回答出 JavaScript 演進歷史,就直接稱絕叫好了:JavaScript的語言設計主要受到了Self(一種基於原型的程式語言)和Scheme(一門函數語言程式設計語言)的影響。在語法結構上它又與C語言有很多相似。
- Self 語言 => 基於原型 => JavaScript 用原型實現面向物件程式設計;
- Scheme 語言 => 函數語言程式設計語言 => JavaScript 函數語言程式設計;
- C 語言 => 面向過程 => JavaScript 面向過程程式設計;
推薦 Eric Elliott 的另外兩篇文章,JavaScript 的兩大支柱:
差的回答
不知道程式設計正規化是什麼、或者沒有提到通過原型實現面向物件、或者沒有提到函數語言程式設計;
二、什麼是函數語言程式設計?
好的回答
函數語言程式設計是最早出現的程式設計正規化,通過組合運算函式來生成程式。有一些重要的概念:
- 純函式
- 避免副作用
- 函式組合
- 高階函式(閉包)
- 函式組合
- 其它函數語言程式設計語言,比如 Lisp、Haskell
本瓜覺得這裡最 nb 就是能提到 monad 和延遲執行了~
差的回答
沒聽說過函數語言程式設計,或者沒有提到純函式、不知道副作用(隱式、顯示輸出)、更不可能知道高階函式、閉包的應用、函式封裝、函式組合這些了;
三、類繼承和原型繼承有什麼區別?
好的回答
類繼承,通過建構函式實現( new
關鍵字);tips:即使不用 ES6 class,也能實現類繼承;
原型繼承,例項直接從其他物件繼承,工廠函式或 Object.create()
;
本瓜這裡覺得能答出以下就很棒了:
類繼承:基於物件複製;
原型繼承:基於物件委託;
推薦閱讀:
差的回答
類繼承和原型繼承沒有什麼差別。
四、面向物件和函式式的優缺點
好的回答
面向物件優點:物件的概念容易理解,方法呼叫靈活;
面向物件缺點:物件可在多個函式中共享狀態、被修改,極有可能會產生“競爭”的情況(多處修改同一物件);
函式式優點:避免變數的共享、修改,純函式不產生副作用;宣告式程式碼風格更易閱讀,更易程式碼重組、複用;
函式式缺點:過度抽象,可讀性降低;學習難度更大,比如 Monad;
差的回答
對二者的優缺點不熟悉;
OK,以上便是本篇分享。點贊關注評論,為好文助力👍
我是掘金安東尼 🤠 100 萬閱讀量人氣前端技術博主 💥 INFP 寫作人格堅持 1000 日更文 ✍ 關注我,陪你一起度過漫長程式設計歲月 🌏
- ChatGPT 不過如此,Kosmos-1 更勝一籌?微軟這波又贏了
- “ChatGPT 們” 所需算力真是“貴滴誇張”!
- 國內有哪些對標 ChatGPT 的大語言模型? 5 大競品
- 常用!提前 reject promise 的 2 種場景,收藏等於學會
- 程式設計開發新朋友 —— ChatGPT 和 NotionAI 實戰
- 為什麼我更推薦 Notion AI 勝於 ChatGPT ?
- 推薦 5 個你大概率沒見過的免費 API ,一鍵獲取資料!
- ✨從純函式講起,一窺最深刻的函子 Monad
- 神馬?要退役 JavaScript ?!誰人出此狂言?!
- 寫出乾淨的 JavaScript 5 個小技巧
- 想要白嫖正則是吧?這一次給你個夠!
- 淺聊快取函式
- JavaScript 中如何取消請求
- 知其然,而知其所以然,JS 物件建立與繼承【彙總梳理】
- 10 個 Reduce 常用“奇技淫巧”
- 萬字年中總結,共勉
- 4 個 JavaScript 最基礎的問題 —— Eric Elliott
- 日拱演算法:搜尋二維矩陣 II
- 日拱演算法:多數元素
- 日拱演算法:只出現一次的數字