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