定 價(jià):49 元
叢書(shū)名:圖靈程序設(shè)計(jì)叢書(shū)
- 作者:[美]辛普森(Kyle Simpson)著
- 出版時(shí)間:2015/4/1
- ISBN:9787115385734
- 出 版 社:人民郵電出版社
- 中圖法分類(lèi):TP312
- 頁(yè)碼:195
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16K
很多人對(duì)JavaScript這門(mén)語(yǔ)言的印象都是簡(jiǎn)單易學(xué),很容易上手。雖然JavaScript語(yǔ)言本身有很多復(fù)雜的概念,但語(yǔ)言的使用者不必深入理解這些概念就可以編寫(xiě)出功能全面的應(yīng)用。殊不知,這些復(fù)雜精妙的概念才是語(yǔ)言的精髓,即使是經(jīng)驗(yàn)豐富的JavaScript開(kāi)發(fā)人員,如果沒(méi)有認(rèn)真學(xué)習(xí)的話(huà)也法真正理解它們。在《圖靈程序設(shè)計(jì)叢書(shū):你不知道的JavaScript(上卷)》中,我們要直面當(dāng)前JavaScript開(kāi)發(fā)者“不求甚解”的大趨勢(shì),深入理解語(yǔ)言?xún)?nèi)部的機(jī)制。
《圖靈程序設(shè)計(jì)叢書(shū):你不知道的JavaScript(上卷)》既適合JavaScript語(yǔ)言初學(xué)者閱讀,又適合經(jīng)驗(yàn)豐富的JavaScript開(kāi)發(fā)人員深入學(xué)習(xí)。
JavaScript語(yǔ)言有很多復(fù)雜的概念,但卻用簡(jiǎn)單的方式體現(xiàn)出來(lái)(比如回調(diào)函數(shù)),因此,JavaScript開(kāi)發(fā)者無(wú)需理解語(yǔ)言?xún)?nèi)部的原理,就能編寫(xiě)出功能全面的程序;就像收音機(jī)一樣,你無(wú)需理解里面的管子和線(xiàn)圈都是做什么用的,只要會(huì)操作收音機(jī)上的按鍵,就可以收聽(tīng)你喜歡的節(jié)目。然而,JavaScript的這些復(fù)雜精妙的概念才是語(yǔ)言的精髓,即使是經(jīng)驗(yàn)豐富的JavaScript開(kāi)發(fā)者,如果沒(méi)有認(rèn)真學(xué)習(xí)也無(wú)法真正理解語(yǔ)言本身的特性。正是因?yàn)榻^大多數(shù)人不求甚解,一遇到出乎意料的行為就認(rèn)為是語(yǔ)言本身有缺陷,進(jìn)而把相關(guān)的特性加入黑名單,久而久之就排除了這門(mén)語(yǔ)言的多樣性,人為地使它變得不完整、不安全。
“你不知道的JavaScript”系列就是要讓不求甚解的JavaScript開(kāi)發(fā)者迎難而上,深入語(yǔ)言?xún)?nèi)部,弄清楚JavaScript每一個(gè)零部件的用途。本書(shū)介紹了該系列的兩個(gè)主題:“作用域和閉包”以及“this和對(duì)象原型”。掌握了這些知識(shí)之后,無(wú)論什么技術(shù)、框架和流行詞語(yǔ),你都能輕松理解。
在互聯(lián)網(wǎng)發(fā)展的早期,JavaScript 就已經(jīng)成為了支撐網(wǎng)頁(yè)內(nèi)容交互體驗(yàn)的基礎(chǔ)技術(shù)。那時(shí)JavaScript 的作用可能僅僅是生成一些閃爍的鼠標(biāo)軌跡或者煩人的彈出窗口,但是經(jīng)過(guò)了大約20 年的發(fā)展,JavaScript 的技術(shù)和能力都發(fā)生了天翻地覆的變化,現(xiàn)在的JavaScript 毫無(wú)疑問(wèn)已經(jīng)成為了世界上使用范圍最廣的軟件平臺(tái)——互聯(lián)網(wǎng)——的核心技術(shù)。
但是作為一個(gè)語(yǔ)言來(lái)說(shuō),它總是成為大家批評(píng)的對(duì)象,部分原因是它有很多歷史遺留問(wèn)題,但主要原因是它的設(shè)計(jì)哲學(xué)有問(wèn)題。就像Brendan Eich 曾經(jīng)說(shuō)過(guò)的,JavaScript 甚至連名字都給人一種“蠢弟弟”的感覺(jué),就像是它更成熟的大哥Java 的不完整版本。不過(guò)名字只不過(guò)是營(yíng)銷(xiāo)策略上的一個(gè)意外,這兩個(gè)語(yǔ)言有許多本質(zhì)上的區(qū)別。JavaScript 和Java 的關(guān)系,就像Carnival(嘉年華)和Car(汽車(chē))的關(guān)系一樣,八竿子打不著。
JavaScript 借鑒了許多語(yǔ)言的概念和語(yǔ)法,比如C 風(fēng)格的過(guò)程式編程以及不太明顯的Scheme/List 風(fēng)格的函數(shù)式編程,因此吸引了許多開(kāi)發(fā)者,甚至是那些不會(huì)編程的新手。用JavaScript 來(lái)編寫(xiě)“Hello World”是非常簡(jiǎn)單的,因此這門(mén)語(yǔ)言很有吸引力并且很好上手。
雖然JavaScript 可能是最早出現(xiàn)的語(yǔ)言之一,但是由于其本身的特殊性,相比其他語(yǔ)言,能真正掌握J(rèn)avaScript 的人比較少。如果想用C、C++ 這樣的語(yǔ)言編寫(xiě)功能全面的程序,那需要對(duì)語(yǔ)言有很深的了解。但是對(duì)于JavaScript 來(lái)說(shuō),編寫(xiě)功能全面的程序僅僅是冰山一角。
JavaScript 語(yǔ)言本質(zhì)上有許多復(fù)雜的概念,但是卻用一種看起來(lái)比較簡(jiǎn)單的方式體現(xiàn)出來(lái), 比如回調(diào)函數(shù),因此JavaScript 開(kāi)發(fā)者通常只是簡(jiǎn)單地使用這些特性,并不會(huì)關(guān)心語(yǔ)言?xún)?nèi)部的實(shí)現(xiàn)原理。
JavaScript 既是一門(mén)充滿(mǎn)吸引力、簡(jiǎn)單易用的語(yǔ)言,又是一門(mén)具有許多復(fù)雜微妙技術(shù)的語(yǔ)言,即使是經(jīng)驗(yàn)豐富的JavaScript 開(kāi)發(fā)者,如果沒(méi)有認(rèn)真學(xué)習(xí)的話(huà)也無(wú)法真正理解它們。
這就是JavaScript 的矛盾之處,也是這門(mén)語(yǔ)言的阿喀琉斯之踵。由于JavaScript 不必理解就可以使用,因此通常來(lái)說(shuō)很難真正理解語(yǔ)言本身,這就是我們面臨的挑戰(zhàn)。
使命
如果每次遇到JavaScript 中出乎意料的行為時(shí),你的反應(yīng)就是把它加入黑名單(很多人都是這么做的),那用不了多久你就會(huì)把JavaScript 語(yǔ)言真正的多樣性全部排除。
剩下的部分就是非常著名的“好的部分”(Good Parts),但是親愛(ài)的讀者們,我懇請(qǐng)你們把它稱(chēng)作“簡(jiǎn)單的部分”、“安全的部分”甚至“不完整的部分”。
“你不知道的JavaScript”系列叢書(shū)要做的事恰好相反:學(xué)習(xí)并且深入理解整個(gè)JavaScript, 尤其是那些“難的部分”。
在本書(shū)中,我們要直面當(dāng)前JavaScript 開(kāi)發(fā)者不求甚解的大趨勢(shì),他們往往不會(huì)深入理解語(yǔ)言?xún)?nèi)部的機(jī)制,遇到困難就會(huì)退縮。我們要做的恰好相反,不是退縮,而是繼續(xù)前進(jìn)。
你們應(yīng)當(dāng)像我一樣,不滿(mǎn)足于只是讓代碼正常工作,而是想要弄清楚“為什么”。我希望你能勇于挑戰(zhàn)這條崎嶇顛簸的“少有人走的路”,擁抱整個(gè)JavaScript。掌握了這些知識(shí)之后,無(wú)論什么技術(shù)、框架和流行詞語(yǔ)你都能輕松理解。
這個(gè)系列中的每本書(shū)專(zhuān)注于語(yǔ)言中一個(gè)最容易被誤解或者最難理解的核心部分,進(jìn)行深入、詳盡的介紹。在閱讀本書(shū)時(shí),你應(yīng)當(dāng)審視自己對(duì)于JavaScript 的理解,仔細(xì)思考書(shū)中講解的理論和那些“你需要知道”的東西。
現(xiàn)在你所理解的JavaScript 很可能是從別人那里學(xué)來(lái)的不完整版。這樣的JavaScript 只是真正的JavaScript 的影子。學(xué)完這個(gè)系列之后,你就會(huì)掌握真正的JavaScript。讀下去吧,我的朋友,JavaScript 恭候你的光臨。
小結(jié)
JavaScript 非常特殊,只學(xué)一部分的話(huà)非常簡(jiǎn)單,但是想要完整地學(xué)習(xí)會(huì)很難(就算學(xué)到夠用也不容易)。當(dāng)開(kāi)發(fā)者感到迷惑時(shí),他們通常會(huì)責(zé)怪語(yǔ)言本身,而不是怪自己對(duì)語(yǔ)言缺乏了解。這個(gè)系列就是為了解決這個(gè)問(wèn)題,讓你打心眼兒里欣賞這門(mén)語(yǔ)言。
Kyle Simpson,推崇開(kāi)放的互聯(lián)網(wǎng),對(duì)JavaScript、HTML5、實(shí)時(shí)/端對(duì)端通信和Web性能有深入研究。他是技術(shù)書(shū)作家、技術(shù)培訓(xùn)師、講師和開(kāi)源社區(qū)的活躍成員。
前言
第一部分 作用域和閉包
序
第1章 作用域是什么
1.1 編譯原理
1.2 理解作用域
1.2.1 演員表
1.2.2 對(duì)話(huà)
1.2.3 編譯器有話(huà)說(shuō)
1.2.4 引擎和作用域的對(duì)話(huà)
1.2.5 小測(cè)驗(yàn)
1.3 作用域嵌套
1.4 異常
1.5 小結(jié)
第2章 詞法作用域
2.1 詞法階段
2.2 欺騙詞法
2.2.1 eval
2.2.2 with
2.2.3 性能
2.3 小結(jié)
第3章 函數(shù)作用域和塊作用域
3.1 函數(shù)中的作用域
3.2 隱藏內(nèi)部實(shí)現(xiàn)
3.3 函數(shù)作用域
3.3.1 匿名和具名
3.3.2 立即執(zhí)行函數(shù)表達(dá)式
3.4 塊作用域
3.4.1 with
3.4.2 try/catch
3.4.3 let
3.4.4 const
3.5 小結(jié)
第4章 提升
4.1 先有雞還是先有蛋
4.2 編譯器再度來(lái)襲
4.3 函數(shù)優(yōu)先
4.4 小結(jié)
第5章 作用域閉包
5.1 啟示
5.2 實(shí)質(zhì)問(wèn)題
5.3 現(xiàn)在我懂了
5.4 循環(huán)和閉包
5.5 模塊
5.5.1 現(xiàn)代的模塊機(jī)制
5.5.2 未來(lái)的模塊機(jī)制
5.6 小結(jié)
附錄A 動(dòng)態(tài)作用域
附錄B 塊作用域的替代方案
附錄C this詞法
附錄D 致謝
第二部分 this和對(duì)象原型
序
第1章 關(guān)于this
……