- 你不知道的JavaScript(上卷)
- (美)凱爾辛普森
- 2479字
- 2019-06-06 10:48:08
前言
在互聯(lián)網(wǎng)發(fā)展的早期,JavaScript就已經(jīng)成為了支撐網(wǎng)頁內(nèi)容交互體驗的基礎技術。那時JavaScript的作用可能僅僅是生成一些閃爍的鼠標軌跡或者煩人的彈出窗口,但是經(jīng)過了大約20年的發(fā)展,JavaScript的技術和能力都發(fā)生了天翻地覆的變化,現(xiàn)在的JavaScript毫無疑問已經(jīng)成為了世界上使用范圍最廣的軟件平臺——互聯(lián)網(wǎng)——的核心技術。
但是作為一個語言來說,它總是成為大家批評的對象,部分原因是它有很多歷史遺留問題,但主要原因是它的設計哲學有問題。就像Brendan Eich曾經(jīng)說過的,JavaScript甚至連名字都給人一種“蠢弟弟”的感覺,就像是它更成熟的大哥Java的不完整版本。不過名字只不過是營銷策略上的一個意外,這兩個語言有許多本質(zhì)上的區(qū)別。JavaScript和Java的關系,就像Carnival(嘉年華)和Car(汽車)的關系一樣,八竿子打不著。
JavaScript借鑒了許多語言的概念和語法,比如C風格的過程式編程以及不太明顯的Scheme/Lisp風格的函數(shù)式編程,因此吸引了許多開發(fā)者,甚至是那些不會編程的新手。用JavaScript來編寫“Hello World”是非常簡單的,因此這門語言很有吸引力并且很好上手。
雖然JavaScript可能是最容易上手的語言之一,但是由于其本身的特殊性,相比其他語言,能真正掌握JavaScript的人比較少。如果想用C、C++這樣的語言編寫功能全面的程序,那需要對語言有很深的了解。但是對于JavaScript來說,編寫功能全面的程序僅僅是冰山一角。
JavaScript語言本質(zhì)上有許多復雜的概念,但是卻用一種看起來比較簡單的方式體現(xiàn)出來,比如回調(diào)函數(shù),因此JavaScript開發(fā)者通常只是簡單地使用這些特性,并不會關心語言內(nèi)部的實現(xiàn)原理。
JavaScript既是一門充滿吸引力、簡單易用的語言,又是一門具有許多復雜微妙技術的語言,即使是經(jīng)驗豐富的JavaScript開發(fā)者,如果沒有認真學習的話也無法真正理解它們。這就是JavaScript的矛盾之處,也是這門語言的阿喀琉斯之踵。由于JavaScript不必理解就可以使用,因此通常來說很難真正理解語言本身,這就是我們面臨的挑戰(zhàn)。
使命
如果每次遇到JavaScript中出乎意料的行為時,你的反應就是把它加入黑名單(很多人都是這么做的),那用不了多久你就會把JavaScript語言真正的多樣性全部排除。
剩下的部分就是非常著名的“好的部分”(Good Parts),但是親愛的讀者們,我懇請你們把它稱作“簡單的部分”“安全的部分”甚至“不完整的部分”。
“你不知道的JavaScript”系列叢書要做的事恰好相反:學習并且深入理解整個JavaScript,尤其是那些“難的部分”。
在本書中,我們要直面當前JavaScript開發(fā)者不求甚解的大趨勢,他們往往不會深入理解語言內(nèi)部的機制,遇到困難就會退縮。我們要做的恰好相反,不是退縮,而是繼續(xù)前進。
你們應當像我一樣,不滿足于只是讓代碼正常工作,而是想要弄清楚“為什么”。我希望你能勇于挑戰(zhàn)這條崎嶇顛簸的“少有人走的路”,擁抱整個JavaScript。掌握了這些知識之后,無論什么技術、框架和流行詞語你都能輕松理解。
這個系列中的每本書專注于語言中一個最容易被誤解或者最難理解的核心部分,進行深入、詳盡的介紹。在閱讀本書時,你應當審視自己對于JavaScript的理解,仔細思考書中講解的理論和那些“你需要知道”的東西。
現(xiàn)在你所理解的JavaScript很可能是從別人那里學來的不完整版。這樣的JavaScript只是真正的JavaScript的影子。學完這個系列之后,你就會掌握真正的JavaScript。讀下去吧,我的朋友,JavaScript恭候你的光臨。
小結
JavaScript非常特殊,只學一部分的話非常簡單,但是想要完整地學習會很難(就算學到夠用也不容易)。當開發(fā)者感到迷惑時,他們通常會責怪語言本身,而不是怪自己對語言缺乏了解。這個系列就是為了解決這個問題,讓你打心眼兒里欣賞這門語言。
本書中的許多例子都需要運行在即將到來的現(xiàn)代JavaScript引擎環(huán)境中,比如ES6。部分代碼在舊(ES6之前的)引擎上可能無法正常運行。
本書排版約定
本書中使用以下排版約定。
· 楷體
表示新的術語。
· 等寬字體
表示代碼段以及段落中的程序元素,比如變量、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句以及關鍵字。
· 等寬粗體
表示命令中不可改動的部分。
· 等寬斜體
表示將由用戶提供的值(或由上下文確定的值)替換的文本。
這個圖標表示提示或建議。
這個圖標表示重要說明。
這個圖標表示警告或提醒。
使用代碼示例
可以在這里下載本書第一部分“作用域和閉包”隨附的資料(代碼示例、練習題等):http://bit.ly/1c8HEWF。
可以在這里下載本書第二部分“this和對象原型”隨附的資料(代碼示例、練習題等):http://bit.ly/ydkjs-this-code
讓本書助你一臂之力。也許你需要在自己的程序或文檔中用到本書中的代碼。除非大段大段地使用,否則不必與我們聯(lián)系取得授權。例如,無需請求許可,就可以用本書中的幾段代碼寫成一個程序。但是銷售或者發(fā)布O'Reilly圖書中代碼的光盤則必須事先獲得授權。引用書中的代碼來回答問題也無需授權。將大段的示例代碼整合到你自己的產(chǎn)品文檔中則必須經(jīng)過許可。
使用我們的代碼時,希望你能標明它的出處,但不強求。出處信息一般包括書名、作者、出版商和書號,例如:Scope and Closures, Kyle Simpson著(O'Reilly, 2014)。版權所有,978-1-491-33558-8。
如果還有關于使用代碼的未盡事宜,可以隨時與我們聯(lián)系:permissions@oreilly.com。
Safari?Books Online

Safari Books Online(http://www.safaribooksonline.com)是應需而變的數(shù)字圖書館。它同時以圖書和視頻的形式出版世界頂級技術和商務作家的專業(yè)作品。
Safari Books Online是技術專家、軟件開發(fā)人員、Web設計師、商務人士和創(chuàng)意人士開展調(diào)研、解決問題、學習和認證培訓的第一手資料。
對于組織團體、政府機構和個人,Safari Books Online提供各種產(chǎn)品組合和靈活的定價策略。用戶可通過一個功能完備的數(shù)據(jù)庫檢索系統(tǒng)訪問O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology以及其他幾十家出版社的上千種圖書、培訓視頻和正式出版之前的書稿。要了解Safari Books Online的更多信息,我們網(wǎng)上見。
聯(lián)系我們
請把對本書的評價和問題發(fā)給出版社。
美國:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區(qū)西直門南大街2號成銘大廈C座807室(100035)
奧萊利技術咨詢(北京)有限公司
O'Reilly的每一本書都有專屬網(wǎng)頁,你可以在那兒找到本書的相關信息,包括勘誤表、示例代碼以及其他信息。本書第一部分“作用域和閉包”的網(wǎng)址是http://oreil.ly/JS_scope_closures。本書第二部分“this和對象原型”的網(wǎng)址是http://bit.ly/ydk-js-this-object-prototypes。
對于本書的評論和技術性問題,請發(fā)送電子郵件到:
bookquestions@oreilly.com
要了解更多O'Reilly圖書、培訓課程、會議和新聞的信息,請訪問以下網(wǎng)站:
我們在Facebook的地址如下:http://facebook.com/oreilly
請關注我們的Twitter動態(tài):http://twitter.com/oreillymedia
我們的YouTube視頻地址如下:http://www.youtube.com/oreillymedia
要查看“你不知道的JavaScript”系列叢書中的全部圖書,請訪問:
- 高手是如何做產(chǎn)品設計的(全2冊)
- Java程序設計與開發(fā)
- 小創(chuàng)客玩轉圖形化編程
- 零基礎玩轉區(qū)塊鏈
- JMeter 性能測試實戰(zhàn)(第2版)
- Python神經(jīng)網(wǎng)絡項目實戰(zhàn)
- Reactive Programming With Java 9
- Kubernetes進階實戰(zhàn)
- Java Web應用開發(fā)項目教程
- 創(chuàng)意UI:Photoshop玩轉APP設計
- 青少年學Python(第2冊)
- Web前端開發(fā)技術:HTML、CSS、JavaScript
- Visual Basic語言程序設計基礎(第3版)
- 計算語言學導論
- JavaScript Concurrency