特別說明,為便于查閱,文章轉自https://github.com/getify/You-Dont-Know-JS
我確信你注意到了,但是這個系列圖書標題中的“JS”不是一個用來詛咒JavaScript的縮寫,雖然有時我們可能都能看出它是在詛咒這門語言的怪異之處!
自從web的最早期開始,JavaScript就一直是在我們消費內容時驅動互動體驗的基礎技術。雖然閃爍的鼠標軌跡和煩人的彈出框可能是JavaScript的起源,但是在差不多20年以后,JavaScript的技術和能力已經增長了許多個數量級,在世界上最廣泛應用的軟件平臺 —— web —— 的核心上,很少有人懷疑它的重要性。
但作為一種語言,它一直總是都是一大堆批評的目標,部分是因為它的遺留問題,但更大程度上是因為它的設計思想。正如 Brendan Eich 曾經說過的,就連名字都讓人聯想它是更成熟的老大哥“Java”的“笨小弟”。但是這個名字只不過是政治上和市場上的巧合。這兩種語言在讀多方面有著廣泛的不同。“JavaScript”與“Java”的聯系,就和“嘉年華(Carnival)”和“車(Car)”一樣。
因為JavaScript從幾種語言中借用了各種概念和語法慣例,包括高傲的C語言風格的過程式性質,以及微妙的,不那么明顯的Scheme/Lisp語言風格的函數式性質,所以它對于廣大的開發者用戶來說極其容易上手。JavaScript的“Hello World”是如此簡單,以至于這門語言在早期接觸時就很吸引人而且很容易讓人適應。
雖然JavaScript也許是最容易上手和使用的語言之一,但與其他的語言相比,它的古怪之處使得牢固掌握這門語言是一個不常見的現象。像C或C++這樣的語言需要相當深度的知識才能寫出完整的程序,而完整的JavaScript程序可以,而且通常都是,僅僅觸及了這門語言的皮毛。
精巧的概念植根于這門語言的深處,而不是簡單地像 看起來 那樣浮于表面,比如將函數作為回調傳遞,它鼓勵JavaScript開發者就那么直接使用這門語言而不必過于擔心底層發生了什么。
它是一種具有廣泛吸引力的,簡單、易用的語言,同時也是一個復雜和微妙的語言機制集合,即使是對于經驗豐富的JavaScript開發者來說,不仔細研究就無法 真正懂得。
這就是JavaScript的矛盾之處,這門語言的致命弱點,我們當下面臨的挑戰。因為JavaScript 可以 不搞懂就使用,所以這門語言經常是從沒被搞懂過。
使命
如果每次你在JavaScript中遭遇驚詫和挫折時,你的反應都是像某些人習慣的那樣將它加入黑名單,那么你很快就會將JavaScript的豐富內涵掏成一個空殼。
雖然這部分子集曾經被稱為著名的“好的部分”,但我懇求你,親愛的讀者,把它看作是“簡單的部分”,“安全的部分”,甚至是“不完整的部分”。
這套 你不懂JavaScript 系列叢書提出了一個相反的挑戰:學習并深刻理解JavaScript的 全部, 甚至是而且特別是“艱難的部分”。
這里,我們迎面挑戰這種趨勢:JS開發者總是得過且過地學習“將就夠用”的東西,而從來不強迫他們自己去學習這門語言究竟是為何與如何工作的。另外,我們摒棄那些當路途艱難時常見的 逃跑 意見。
我不滿足于,你也不應當滿足于,一看到某些東西 好用 就停下來,而不真正知道 為什么。我禮貌地挑戰你沿著這條顛簸的“少有人走的路”走下去,并擁抱JavaScript和它能做的一起。有了這些知識,沒有什么技術,框架,本周最流行的詞兒,是你理解不了的。
這些書的每一本都承擔這門語言的一個具體的核心部分 —— 這些內容都是最常被誤解或不被了解的,并且非常深入、窮盡地探究它們。你應當在讀過之后對你的理解有堅定的信心,不僅僅是理論上的,而且是對實際的“你需要懂得的”部分。
你 目前 知道的JavaScript可能是被那些沒有完全懂得它的人傳授下來的 部分。那些 JavaScript只是真正的這門語言的影子。你 還 不 真正 懂得JavaScript,但如果你深入這個系列,你會的。讀下去,我的朋友。JavaScript在等著你。
總結
JavaScript很了不起。很容易學習它的一部分,但是完整地(甚至是 充分地)學習它可就難太多了。當開發者們遭遇困惑時,他們經常責備這門語言而不是自己對它理解的匱乏。這些書的目的就是要修正這些情況,極大地鞏固這門語言中你現在可以,而且 應當,深刻 懂得 的東西。
注意:這本書中的許多例子都假定運行在現代化的(以及與未來接軌的)JavaScript引擎環境中,比如ES6。一些代碼可能會在老版本的(前ES6)引擎中不能如描述的那樣工作。