4 個 JavaScript 最基礎的問題 —— Eric Elliott
theme: smartblue
本篇參考:http://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
- 日拱算法:多數元素
- 日拱算法:只出現一次的數字