你不懂JS:入門與進階

你不懂JS:入門與進階

第三章:進入YDKJS

這個系列叢書到底是為了什么岳瞭?簡單地說薄风,它的目的是認真地學習 JavaScript的所有部分君仆,不僅是這門語言的某些人稱之為“好的部分”的子集丐一,也不僅是讓你在工作中搞定任務所需的最小部分的知識卓练。

其他語言中,認真的開發(fā)者總是希望努力學習他們主要使用的語言的大部分或全部晒哄,但是JS開發(fā)者由于通常不太學習這門語言而在人群中顯得很扎眼睁宰。這不是一件好事,而且我們也不應當繼續(xù)將之視為常態(tài)寝凌。

你不懂JSYDKJS)系列的立場是與學習JS的通常方式形成鮮明的對比柒傻,而且與你將會讀到的其他JS書籍不同。它挑戰(zhàn)你超越自己的舒適區(qū)较木,對每一個你遇到的行為問一個更深入的“為什么”红符。你準備好接受挑戰(zhàn)了嗎?

我將用這最后一章的篇幅來簡要地總結一下這個系列其他書目的內容伐债,和如何在 YDKJS 的基礎上最有效地建立學習JS的基礎预侯。

作用域與閉包

也許你需要快速接受的基礎之一,就是在JavaScript中變量的作用域是如何工作的峰锁。關于作用域僅有傳聞中的模糊 觀念 是不夠的萎馅。

作用域與閉包 從揭穿常見的誤解開始:JS是“解釋型語言”因此是不被編譯的。不對虹蒋。

JS引擎在你的代碼執(zhí)行的前一刻(有時是在執(zhí)行期間C臃肌)編譯它。所以我們首先深入了解編譯器處理我們代碼的方式魄衅,以此來理解它如何找到并處理變量和函數(shù)的聲明耍目。沿著這條道路,我們將見到JS變量作用域管理的特有隱喻徐绑,“提升”邪驮。

對“詞法作用域”的極其重要的理解,是我們在這本書最后一章探索閉包時所需的基石傲茄。閉包也許是JS所有的概念中最重要的一個毅访,但如果你沒有首先牢牢把握住作用域的工作方式,那么閉包將很可能依然不在你的掌握之中盘榨。

閉包的一個重要應用是模塊模式喻粹,正如我們在本書第二章中簡要介紹過的那樣。模塊模式也許是JavaScript的所有代碼組織模式中最流行的一種草巡;深刻理解它應當是你的首要任務之一守呜。

this與對象原型

也許關于JavaScript傳播得最廣泛和持久的謬誤之一是認為this關鍵字指代它所出現(xiàn)的函數(shù)。可怕的錯誤查乒。

this關鍵字是根據(jù)函數(shù)如何被執(zhí)行而動態(tài)綁定的弥喉,而事實上有四種簡單的規(guī)則可以用來理解和完全決定this綁定。

this密切相關的是對象原型屬性玛迄,它是一種屬性的查詢鏈由境,與查詢詞法作用域變量的方式相似。但是原型中包含的是另一個關于JS的巨大謬誤:模擬(山寨)類和繼承(所謂的“原型繼承”)的想法蓖议。

不幸的是虏杰,渴望將類和繼承的設計模式思想帶入JavaScript只是你能做的最差勁兒的事情,因為雖然語法可能欺騙你勒虾,使你認為有類這樣的東西存在纺阔,但實際上原型機制在行為上是根本相反的。

目前的問題是修然,是忽略這種錯位并假裝你實現(xiàn)的是“繼承”更好州弟,還是學習并接納對象原型系統(tǒng)實際的工作方式更恰當。后者被稱為“行為委托”更合適低零。

這不光是語法上的偏好問題。委托是一種完全不同的拯杠,更強大的設計模式掏婶,其中的原因之一就是它取代了使用類和繼承進行設計的需要。但是對于以談論JavaScript的一生為主題的幾乎所有的其他博客潭陪,書籍雄妥,和論壇來說,這些斷言絕對是打臉的依溯。

我對委托和繼承做出的宣言不是源于對語言和其語法的厭惡老厌,而是來自于渴望看到這門語言的真實力量被正確地利用,渴望看到無盡的困惑與沮喪被一掃而光黎炉。

但是我舉出的關于原型和委托的例子可要比我在這里亂說的東西復雜得多枝秤。如果你準備好重新思考你認為你所了解的關于JavaScript“類”和“繼承”的一切,我給你一個機會來“服用紅色的藥丸”慷嗜,并且看一看本系列的 this與對象原型 的第四到六章淀弹。

類型與文法

這個系列的第三本書主要集中于解決另一個極具爭議的話題:類型強制轉換。也許沒有什么話題能比你談論隱含的強制轉換造成的困惑更能使JS開發(fā)者感到沮喪了庆械。

到目前為止薇溃,慣例的智慧說隱含強制轉換是這門語言的“壞的部分”,并且應當不計一切避免它缭乘。事實上沐序,有些人已經到了將它稱為語言設計的“缺陷”的地步了。確實存在這么一些工具,它們的全部工作就是掃描你的代碼策幼,并在你進行任何強制轉換邑时,甚至是做有些像強制轉換的事情時報警。

但是強制轉換真的如此令人困惑垄惧,如此的壞刁愿,如此的不可信,以至于只要你使用它到逊,你的代碼從一開始就滅亡了嗎铣口?

我說不。在第一到三章中建立了對類型和值真正的工作方式的理解后觉壶,第四章參與了這個辯論脑题,并從強制轉換的角落和縫隙全面地講解它的工作方式。我們將看到強制轉換的哪一部分真的令人驚訝铜靶,而且如果花時間去學習叔遂,哪一部分實際上完全是合理的。

但我不僅僅要說強制轉換是合理的和可以學習的争剿,我斷言強制轉換是一種 你應當在代碼中使用的 極其有用而且完全被低估的工具已艰。我要說在合理使用的情況下,強制轉換不僅可以工作蚕苇,而且會使你的代碼更好哩掺。所有唱反調的和懷疑的人當然會嘲笑這樣的立場,但我相信它是讓你玩兒好JS游戲的主要按鍵之一涩笤。

你是想繼續(xù)人云亦云嚼吞,還是想將所有的臆測放在一邊,用一個全新的視角觀察強制轉換蹬碧?這個系列的 類型與文法 將會強制轉換你的想法舱禽。

異步與性能

這個系列的前三本書聚焦于這門語言的核心技術,但是第四本書稍稍開出一個分支來探討在這門語言技術之上的管理異步編程的模式恩沽。異步不僅對于性能和我們的應用程序很關鍵誊稚,而且它日漸成為改進可寫性和可維護性的關鍵因素。

這本書從搞清楚許多令人困惑的術語和概念開始罗心,比如“異步”片吊,“并行”和“并發(fā)”。而且深入講解了這些東西如何適用和不適用于JS协屡。

然后我們繼續(xù)檢視作為開啟異步的主要方法:回調俏脊。但我們很快就會看到,對于現(xiàn)代異步編程的需求來說肤晓,單靠回調自身是遠遠不夠的爷贫。我們將找出僅使用回調編碼的兩種主要的不足之處:控制反轉(IoC)信任丟失和缺乏線性的可推理性认然。

為了解決這兩種主要的不足,ES6引入了兩種新的機制(實際上也是模式):promise 和 generator漫萄。

Prmise是一個“未來值”的一種與時間無關的包裝卷员,它讓你推理并組合這些未來值而不必關心它們是否已經準備好。另外腾务,它們通過將回調沿著一個可信賴和可組裝的promise機制傳遞毕骡,有效地解決了IoC信任問題。

Generator給JS函數(shù)引入了一種新的執(zhí)行模式岩瘦,generator可以在yield點被暫停而稍后異步地被繼續(xù)未巫。這種“暫停-繼續(xù)”的能力讓generator在幕后異步地被處理,使看起來同步启昧,順序執(zhí)行的代碼成為可能叙凡。如此,我們就解決了回調的非線性密末,非本地跳轉的困惑握爷,并因此使我們的異步代碼看起來是更容易推理的同步代碼。

但是严里,是promise與generator的組合給了我們JavaScript中最有效的異步代碼模式新啼。事實上,在即將到來的ES7與之后的版本中刹碾,大多數(shù)精巧的異步性肯定會建立在這個基礎之上燥撞。為了認真地在一個異步的世界中高效地編程,你將需要對promise與generator的組合十分適應教硫。

如果promise和generator是關于表達一些模式,這些模式讓你的程序更加并發(fā)地運行辆布,而因此在更短的時間內完成更多的處理瞬矩,那么JS在性能優(yōu)化上就擁有許多其他的方面值得探索。

第五章鉆研的話題是使用Web Worker的程序并行性和使用SIMD的數(shù)據(jù)并行性锋玲,以及像ASM.js這樣的底層優(yōu)化技術景用。第六章從正確的基準分析技術的角度來觀察性能優(yōu)化,包括什么樣的性能值得關心而什么應當忽略惭蹂。

高效地編寫JavaScript意味著編寫的代碼可以突破這種限制壁壘:在范圍廣泛的瀏覽器和其他環(huán)境中動態(tài)運行伞插。這需要我們進行更多復雜的詳細計劃與努力,才能使一個程序從“可以工作”到“工作得很好”盾碗。

給你編寫合理且高效的JavaScript代碼所需的全部工具與技能媚污,異步與性能 就是為此而設計的。

ES6與未來

至此廷雅,無論你感覺自己已經將JavaScript掌握的多么好耗美,現(xiàn)實是JavaScript從來沒有停止過進化京髓,而且進化的頻率正在飛快地增長。這個事實幾乎就是本系列精神的含義商架,擁抱我們永遠不會完全 懂得 的JS的所有部分堰怨,因為只要你掌握了它的全部,就會有你需要學習的新的東西到來蛇摸。

這本書專注于這門語言在中短期的發(fā)展前景备图,不僅是像ES6這樣 已知的 東西,還包括在未來 可能的 東西赶袄。

雖然這個系列的所有書目采納的是在編寫它們時JavaScript的狀態(tài)揽涮,也就是ES6正在被接納的半途中,但是這個系列更主要地集中于ES5∑唬現(xiàn)在我們想要將注意力轉移到ES6绞吁,ES7,和……

因為在編寫本書時ES6已經近于完成唬格,ES6與未來 首先將ES6中確定的東西分割為幾個關鍵的范疇家破,包括新的語法,新的數(shù)據(jù)結構(集合)购岗,和新的處理能力以及API泌参。我們將在各種細節(jié)的層面講解這些新的ES6特性中的每一個踱承,包括復習我們在本系列的其他書目中遇到過的細節(jié)。

這是一些值得一讀的激動人心的ES6特性:解構,參數(shù)默認值嘲更,symbol,簡潔方法燃观,計算屬性织阅,箭頭函數(shù),塊兒作用域绎签,promise枯饿,generator,iterator诡必,模塊奢方,代理,weakmap爸舒,以及很多蟋字,很多別的東西!呼扭勉,ES6真是不容小覷鹊奖!

這本書的第一部分是一張路線圖,為了對你將要在以后幾年中編寫和探索的新改進的JavaScript做好準備涂炎,它指明了你需要學習的所有東西嫉入。

這本書稍后的部分將注意力轉向簡要地介紹一些我們將在近未來可能看到的JavaScript的新東西焰盗。在這里最重要的是,要理解在后ES6時代咒林,JS很可能將會一個特性一個特性地進化熬拒,而不是一個版本一個版本地進化,這意味著我們將在比你想象的早得多的時候垫竞,看到這些近未來的到來澎粟。

JavaScript的未來是光明的。這不正是我們開始學習它好時機嗎;兜伞活烙?

復習

YDKJS 系列投身于這樣的命題:所有的JS開發(fā)者都可以,也應該學習這門偉大語言的每一部分遣鼓。沒有任何個人意見啸盏,沒有任何框架的設想,沒有任何項目的期限可以作為你從沒有學習和深入理解JavaScript的借口骑祟。

我們聚焦這門語言中的每一個重要領域回懦,為之專著一本很短但是內容非常稠密的書,來全面地探索它的 —— 你也許認為自己知道但可能并不全面 —— 所有部分次企。

“你不懂JS”不是一種批評或羞辱怯晕。它是我們所有人,包括我自己缸棵,都必須正視的一種現(xiàn)實舟茶。學習JavaScript不是一個最終目標,而是一個過程堵第。我們還不懂JavaScript吧凉。但是我們會的!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末踏志,一起剝皮案震驚了整個濱河市阀捅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狰贯,老刑警劉巖也搓,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赏廓,死亡現(xiàn)場離奇詭異涵紊,居然都是意外死亡,警方通過查閱死者的電腦和手機幔摸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門摸柄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人既忆,你說我怎么就攤上這事驱负∴戮粒” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵跃脊,是天一觀的道長宇挫。 經常有香客問我,道長酪术,這世上最難降的妖魔是什么器瘪? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮绘雁,結果婚禮上橡疼,老公的妹妹穿的比我還像新娘。我一直安慰自己庐舟,他們只是感情好欣除,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挪略,像睡著了一般历帚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘟檩,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天抹缕,我揣著相機與錄音,去河邊找鬼墨辛。 笑死卓研,一個胖子當著我的面吹牛,可吹牛的內容都是我干的睹簇。 我是一名探鬼主播奏赘,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼太惠!你這毒婦竟也來了磨淌?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤凿渊,失蹤者是張志新(化名)和其女友劉穎梁只,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體埃脏,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡搪锣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彩掐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片构舟。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖堵幽,靈堂內的尸體忽然破棺而出狗超,到底是詐尸還是另有隱情弹澎,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布努咐,位于F島的核電站苦蒿,受9級特大地震影響,放射性物質發(fā)生泄漏渗稍。R本人自食惡果不足惜刽肠,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望免胃。 院中可真熱鬧音五,春花似錦、人聲如沸羔沙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扼雏。三九已至坚嗜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诗充,已是汗流浹背苍蔬。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蝴蜓,地道東北人碟绑。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像茎匠,于是被迫代替她去往敵國和親格仲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容