特別說明似袁,為便于查閱凳宙,文章轉(zhuǎn)自https://github.com/getify/You-Dont-Know-JS
我確信你注意到了殴胧,但是這個(gè)系列圖書標(biāo)題中的“JS”不是一個(gè)用來詛咒JavaScript的縮寫荚坞,雖然有時(shí)我們可能都能看出它是在詛咒這門語言的怪異之處墨闲!
自從web的最早期開始澡谭,JavaScript就一直是在我們消費(fèi)內(nèi)容時(shí)驅(qū)動(dòng)互動(dòng)體驗(yàn)的基礎(chǔ)技術(shù)。雖然閃爍的鼠標(biāo)軌跡和煩人的彈出框可能是JavaScript的起源损俭,但是在差不多20年以后蛙奖,JavaScript的技術(shù)和能力已經(jīng)增長(zhǎng)了許多個(gè)數(shù)量級(jí),在世界上最廣泛應(yīng)用的軟件平臺(tái) —— web —— 的核心上杆兵,很少有人懷疑它的重要性雁仲。
但作為一種語言,它一直總是都是一大堆批評(píng)的目標(biāo)琐脏,部分是因?yàn)樗倪z留問題攒砖,但更大程度上是因?yàn)樗脑O(shè)計(jì)思想。正如 Brendan Eich 曾經(jīng)說過的日裙,就連名字都讓人聯(lián)想它是更成熟的老大哥“Java”的“笨小弟”吹艇。但是這個(gè)名字只不過是政治上和市場(chǎng)上的巧合。這兩種語言在讀多方面有著廣泛的不同昂拂∈苌瘢“JavaScript”與“Java”的聯(lián)系,就和“嘉年華(Carnival)”和“車(Car)”一樣格侯。
因?yàn)镴avaScript從幾種語言中借用了各種概念和語法慣例鼻听,包括高傲的C語言風(fēng)格的過程式性質(zhì)财著,以及微妙的,不那么明顯的Scheme/Lisp語言風(fēng)格的函數(shù)式性質(zhì)撑碴,所以它對(duì)于廣大的開發(fā)者用戶來說極其容易上手撑教。JavaScript的“Hello World”是如此簡(jiǎn)單,以至于這門語言在早期接觸時(shí)就很吸引人而且很容易讓人適應(yīng)醉拓。
雖然JavaScript也許是最容易上手和使用的語言之一伟姐,但與其他的語言相比,它的古怪之處使得牢固掌握這門語言是一個(gè)不常見的現(xiàn)象亿卤。像C或C++這樣的語言需要相當(dāng)深度的知識(shí)才能寫出完整的程序玫镐,而完整的JavaScript程序可以,而且通常都是怠噪,僅僅觸及了這門語言的皮毛。
精巧的概念植根于這門語言的深處杜跷,而不是簡(jiǎn)單地像 看起來 那樣浮于表面傍念,比如將函數(shù)作為回調(diào)傳遞,它鼓勵(lì)JavaScript開發(fā)者就那么直接使用這門語言而不必過于擔(dān)心底層發(fā)生了什么葛闷。
它是一種具有廣泛吸引力的憋槐,簡(jiǎn)單、易用的語言淑趾,同時(shí)也是一個(gè)復(fù)雜和微妙的語言機(jī)制集合阳仔,即使是對(duì)于經(jīng)驗(yàn)豐富的JavaScript開發(fā)者來說,不仔細(xì)研究就無法 真正懂得扣泊。
這就是JavaScript的矛盾之處近范,這門語言的致命弱點(diǎn),我們當(dāng)下面臨的挑戰(zhàn)延蟹。因?yàn)镴avaScript 可以 不搞懂就使用评矩,所以這門語言經(jīng)常是從沒被搞懂過。
使命
如果每次你在JavaScript中遭遇驚詫和挫折時(shí)阱飘,你的反應(yīng)都是像某些人習(xí)慣的那樣將它加入黑名單斥杜,那么你很快就會(huì)將JavaScript的豐富內(nèi)涵掏成一個(gè)空殼。
雖然這部分子集曾經(jīng)被稱為著名的“好的部分”沥匈,但我懇求你蔗喂,親愛的讀者,把它看作是“簡(jiǎn)單的部分”高帖,“安全的部分”缰儿,甚至是“不完整的部分”。
這套 你不懂JavaScript 系列叢書提出了一個(gè)相反的挑戰(zhàn):學(xué)習(xí)并深刻理解JavaScript的 全部散址, 甚至是而且特別是“艱難的部分”返弹。
這里锈玉,我們迎面挑戰(zhàn)這種趨勢(shì):JS開發(fā)者總是得過且過地學(xué)習(xí)“將就夠用”的東西,而從來不強(qiáng)迫他們自己去學(xué)習(xí)這門語言究竟是為何與如何工作的义起。另外拉背,我們摒棄那些當(dāng)路途艱難時(shí)常見的 逃跑 意見笑撞。
我不滿足于网棍,你也不應(yīng)當(dāng)滿足于,一看到某些東西 好用 就停下來偿凭,而不真正知道 為什么齐蔽。我禮貌地挑戰(zhàn)你沿著這條顛簸的“少有人走的路”走下去两疚,并擁抱JavaScript和它能做的一起。有了這些知識(shí)含滴,沒有什么技術(shù)诱渤,框架,本周最流行的詞兒谈况,是你理解不了的勺美。
這些書的每一本都承擔(dān)這門語言的一個(gè)具體的核心部分 —— 這些內(nèi)容都是最常被誤解或不被了解的,并且非常深入碑韵、窮盡地探究它們赡茸。你應(yīng)當(dāng)在讀過之后對(duì)你的理解有堅(jiān)定的信心,不僅僅是理論上的祝闻,而且是對(duì)實(shí)際的“你需要懂得的”部分占卧。
你 目前 知道的JavaScript可能是被那些沒有完全懂得它的人傳授下來的 部分。那些 JavaScript只是真正的這門語言的影子联喘。你 還 不 真正 懂得JavaScript华蜒,但如果你深入這個(gè)系列,你會(huì)的豁遭。讀下去友多,我的朋友。JavaScript在等著你堤框。
總結(jié)
JavaScript很了不起域滥。很容易學(xué)習(xí)它的一部分,但是完整地(甚至是 充分地)學(xué)習(xí)它可就難太多了蜈抓。當(dāng)開發(fā)者們?cè)庥隼Щ髸r(shí)启绰,他們經(jīng)常責(zé)備這門語言而不是自己對(duì)它理解的匱乏。這些書的目的就是要修正這些情況沟使,極大地鞏固這門語言中你現(xiàn)在可以委可,而且 應(yīng)當(dāng),深刻 懂得 的東西。
注意:這本書中的許多例子都假定運(yùn)行在現(xiàn)代化的(以及與未來接軌的)JavaScript引擎環(huán)境中着倾,比如ES6拾酝。一些代碼可能會(huì)在老版本的(前ES6)引擎中不能如描述的那樣工作。