Download ebook pdf of Javascript Programming Language And The Essence Of Practice 3Rd Edition Bowen Viewpoint Produced Chinese Edition Zhou Ai Min 周爱民 full chapter

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 70

JavaScript programming language and

the essence of Practice 3rd Edition


Bowen viewpoint produced Chinese
Edition Zhou Ai Min ■■■
Visit to download the full and correct content document:
https://ebookstep.com/download/ebook-24142950/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

SQL must know the 5th edition produced by Turing


Chinese Edition Ben · Fu Da ( Ben Forta )

https://ebookstep.com/download/ebook-55537812/

New University Chemistry Fourth Edition Chinese Edition


Zhou Wei Hong

https://ebookstep.com/product/new-university-chemistry-fourth-
edition-chinese-edition-zhou-wei-hong/

Speech and Language Processing An Introduction to


Natural Language Processing Computational Linguistics
and Speech Recognition 3rd Edition Daniel Jurafsky

https://ebookstep.com/product/speech-and-language-processing-an-
introduction-to-natural-language-processing-computational-
linguistics-and-speech-recognition-3rd-edition-daniel-jurafsky/

Gesamtausgabe Bd 91 Ergänzungen und Denksplitter IV


ABTEILUNG HINWEISE UND AUFZEICHNUNGEN Martin Heidegger
Mark Michalski Editor

https://ebookstep.com/product/gesamtausgabe-bd-91-erganzungen-
und-denksplitter-iv-abteilung-hinweise-und-aufzeichnungen-martin-
heidegger-mark-michalski-editor/
■■■■■ Tools of Titans The Tactics Routines and Habits
of Billionaires Icons and World Class Performers
Chinese Edition Timothy Ferriss

https://ebookstep.com/download/ebook-33419796/

In memoriam Francolino Gonçalves O P 1943 2017 Volume


91 Études Bibliques Nouvelle Série 1st Edition M
Staszak Editor

https://ebookstep.com/product/in-memoriam-francolino-goncalves-
o-p-1943-2017-volume-91-etudes-bibliques-nouvelle-serie-1st-
edition-m-staszak-editor/

■■■■ Machine Learning Chinese Edition Zhou Zhihua ■■■

https://ebookstep.com/download/ebook-23782332/

Assembly Language Step by Step Programming with Linux


Duntemann Jeff

https://ebookstep.com/product/assembly-language-step-by-step-
programming-with-linux-duntemann-jeff/

The Many Lives of Yang Zhu A Historical Overview SUNY


series in Chinese Philosophy and Culture 1st Edition
Carine Defoort

https://ebookstep.com/product/the-many-lives-of-yang-zhu-a-
historical-overview-suny-series-in-chinese-philosophy-and-
culture-1st-edition-carine-defoort/
内容简介
JavaScript是⼀门包含多种语⾔特性的混合范型语⾔,在⾯向对象
和函数式语⾔特性⽅⾯表现尤为突出,且在ES6之后所添加的并⾏语
⾔特性也极为出⾊。本书基于ES6,并涵盖最新的ES2019规范,全⾯
讲述JavaScript在五个⽅⾯的语⾔特性,以及将这些特性融会如⼀的⽅
法。本书不但完整解析了JavaScript语⾔,还逐⼀剖析了相关特性在多
个开源项⽬中的编程实践与应⽤,是难得的语⾔学习参考书。
本书作者在前端开发领域经验丰富、深耕不辍,⼀书三版,历经
⼗余年。书中对JavaScript语⾔的理解与展望,尤其适合期望精通这门
语⾔的中⾼级程序员和语⾔实践者阅读。

未经许可,不得以任何⽅式复制或抄袭本书之部分或全部内容。
版权所有,侵权必究。

图书在版编⽬(CIP)数据
JavaScript语⾔精髓与编程实践/周爱⺠著.—3版.—北京:电⼦⼯业
出版社,2020.6
ISBN 978-7-121-38669-5

Ⅰ.① J… Ⅱ .①周 … Ⅲ .① JAVA 语⾔ — 程序设计 Ⅳ .


①TP312.8

中国版本图书馆CIP数据核字(2020)第037301号

责任编辑:张春⾬
印 刷:三河市良远印务有限公司
装 订:三河市良远印务有限公司
出版发⾏:电⼦⼯业出版社
北京市海淀区万寿路173信箱 邮编:
100036
开 本:787×980 1/16 印张:48.5 字数:1025千

版 次:2008年1⽉第1版
2020年6⽉第3版
印 次:2020年6⽉第1次印刷
定 价:144.00元

凡所购买电⼦⼯业出版社图书有缺损问题,请向购买书店调换。
若书店售缺,请与本社发⾏部联系,联系及邮购电话:( 010 )
88254888,88258888。
质量投诉请发邮件⾄zlts@phei.com.cn,盗版侵权举报请发邮件⾄
dbqq@phei.com.cn。
本书咨询联系⽅式:(010)51260888-819,faq@phei.com.cn。
推荐序1
⼀本不是所有⼈都需要的好书
这个有点绕⼝的标题,是从⾖瓣上本书第1版的⼀个书评标题照录
⽽来的。⾖瓣上排名前列的评论还有“这是⼀本硬书”“国内技术原创书
中稀有的‘异数’”等。实际上,我觉得不仅是国内,算上在市⾯上能看
到的所有JavaScript相关的书,本书都绝对堪称“硬书”“异数”。
传统上,许多⼤部头的JavaScript相关的图书,会有⼤量篇幅介绍
DOM相关的API和如何结合语⾔与平台API进⾏Web前端编程,这些年
也可能换成是Node.js的API和服务器端编程。从⼊门或进阶来说,这
样的编排都是合适的,因为结合特定平台和领域的具体编程实践可以
更快速地建⽴学习的正向反馈。专注JavaScript语⾔本⾝的书也不是没
有,ES6时代到来之后,颇有⼏本书全⾯细致地介绍了JavaScript语⾔
的新特性。甚⾄有很有名的书,会⼀直讲到不为多数⼈所知的语⾔细
节,受到中⾼级开发者的追捧。不过这些书还都是⽤来“学习”语⾔的
书。
爱⺠的这本书,却不是⼀本“学习”⽤的书,⽽是⼀本“阐释”⽤的
书。不要说JavaScript初学者,就算你有三五年甚⾄⼗年的JavaScript开
发经验,读起这本书可能也不易。因为绝⼤部分开发者不习惯这样思
考问题。
⽐⽅说,这本书⼤的章节是按照结构化、⾯向对象、函数式、动
态化等编程范式来展开讨论的,最新版中还加⼊了“并⾏计算”。
有些读者或许也看过⼀些谈编程范式的书,甚⾄专门谈在
JavaScript语⾔中使⽤某⼀种编程范式的书(⽐如近年来随着某框架⽽
在 JavaScript 圈逐渐⽕起来的函数式编程),但这些书还都是引领
你“学习”⼀个范式,教你“应⽤”⼀个范式的书。
爱⺠这本书的出发点与其他书不同,并不是为了学习、应⽤“范
式”,⽽是为了分析“编程语⾔”,取之为线索。为此,需要系统性地逐
⼀论述多种主要范式,然后将JavaScript语⾔的要素分解并归纳⼊不同
范式下进⾏讨论。需要注意的是,JavaScript语⾔与每种范式代表性的
经典编程语⾔都有很⼤的不同。所以在这个过程中,读者也可以注意
体悟多种范式是以怎样⼀种⽅式不完美却可⽤地并存于JavaScript这门
语⾔之中的。
在每章的开始,先有⼗数⻚的概述来论述范式和其背后的思想源
流,故这⼀部分⼏乎总是要以跳出JavaScript这单⼀语⾔的视⾓来论述
的。这些概述也绝不是简单地从其他书或资料中拿⼀些内容拼凑⽽成
的,⽽是爱⺠以⾃⼰数⼗年编程和架构的⼼得理解精炼⽽成的。光这
些概述,在本书第 1 版出版时的技术图书市场上前所未⻅,到今⽇
JavaScript的相关图书汗⽜充栋,恐怕也仍然独此⼀家。
不过,这也带来⼀个问题,就是对于绝⼤多数读者来说,概述可
能反⽽⽐后续章节更难读,初读时⼀知半解。
这次爱⺠要出第3版,寄赠我⼀些样稿,我读到第4章概述中论
及“结构化的疑难”是“抽象层次过低”,⽽“⾯向对象”范式正是对此的
应答时,颇有茅塞顿开之感。但后来重新翻阅12年前爱⺠赠我的本书
第1版,才发现已包含了这段论述。可⻅当年我恐怕也是囫囵吞枣,虽
读之也并不能领会消化。
然⽽即使我现在提到了这个段落,读者可能特意去认真阅读该段
落,记住了、理解了,也不⻅得能产⽣直接的“⽤处”。
打个不⼀定恰当的⽐喻,⾦庸的《射雕英雄传》中周伯通讲《九
阴真经》:“这上卷经⽂中所载,都是道家修炼内功的⼤道,以及拳经
剑理,并⾮克敌制胜的真实功夫,若未学到下卷中的实⽤法门,徒知
诀窍要旨,却是⼀⽆⽤处。”
市⾯上⼤部分技术图书,都是讲“实⽤法门”的,偶尔讲⼀点“拳经
剑理”。爱⺠写这本书的终极⽬标其实是传授“内功⼤道”,为此拿了⼀
门最流⾏的武功(语⾔)来拆解剖析,总结出其独特的“拳经剑理”,
以印证“⼤道”。在这个阐释的过程中,“实⽤法门”讲的不多,即使讲
了⼀些,也意不在此。
事实上,很多⼈只是想要“实⽤法门”的书,最好还是速成的。那
就最好不要选本书了。这种需求也不好说错。或许先讲“实⽤法门”,
再讲“拳经剑理”乃⾄“⼤道”,才是符合普通⼈的认知规律的。
另⼀⽅⾯,即使⼀个⼈也有意于“拳经剑理”乃⾄“⼤道”,如果市
⾯上全是讲“实⽤法门”的书,他⼀直以来熟悉的只有这个套路,就会
对其他模式不太适应。⽐如说,对⼀个语⾔特性的解说和评论,绝⼤
部分图书的讲法主要基于“实⽤”,也就是,有什么⽤,怎么⽤,⽤起
来顺⼿不顺⼿。但爱⺠这本书的视⾓就很不⼀样,主要是基于 “ ⼤
道”和“拳经剑理”的内在逻辑进⾏推演。
需要理解的是,这两个⽅向可能互相印证,也可能产⽣⽭盾。编
程语⾔和⼀切复杂的⼈造事物⼀样,是不完美的。
这也会延伸到语⾔设计上。作为程序员,虽然看到新语⾔特性的
介绍通常还都是从“实⽤”⾓度讲解(宣传)的,但在设计阶段,其实
要接受各个维度、不同层⾯的需求和约束。语⾔特性要平衡多种不同
因素,平衡不了就要做取舍。但这个取舍到底是不是合适,就⻅仁⻅
智了。
爱⺠在这次新版的第4章中花了不少篇幅讨论⽬前stage 3的类字段
(class fields)提案和他设计的替代性⽅案。这个提案⽐表⾯上看起来
要复杂得多,⽆论是在委员会还是在社区⾥,不同的⼈的看法会⾮常
不同,⽽且这种分歧贯穿了“⼤道”“拳经剑理”“实⽤法门”各个层⾯。
需要注意,即使持同样⽴场的⼈,⽐⽅说同样反对现有提案,其背后
的原因也可能截然不同,对解决路径的判断也会截然不同。TC39是基
于⼀致同意的⽅式推进⼯作的。对于接受现有提案的⼈来说,即使其
认知不同,但⾄少表⾯上是达成⼀致的。⽽对不同意现有提案的⼈,
各有各的不同意,因⽽也⽆法达成⼀致。表现出来的结果,就是爱⺠
在书中所说:“类字段提案提供了⼀个极具争议的私有字段访问语法,
并成功地做对了唯⼀⼀件事情,让社区把全部的争议焦点放在了这个
语法上”。这也是类字段提案的悲剧性之所在。
我认为,讨论这个话题的价值,不在于给出⼀个答案(毕竟TC39
都给不出令⼈满意的答案),⽽是这个思考过程。在这个过程中,我
们需要同时考虑“⼤道”(⾯向对象范式)、“拳经剑理”(JavaScript现
有的语法和语义约定和约束,与后续提案的关系和协调性等)、“实⽤
法门”(使⽤⽅式、如何满⾜各种需求、代码⻛格、性能……)等不同
的层⾯。这是⼀个极好的思维训练,在这个过程中,⽆论你得到怎样
的结论,都会对JavaScript语⾔有更深层次的认知和把握。⽽这样的内
容,也只能存在于“阐释”之书中。
然后说说对“阐释”可能存在的疑问。那就是多种不同的甚⾄⽭盾
的“阐释”是否可以共存,有没有⼀种解释是最正确的,或者权威的。
举⼀个⼩例⼦, typeof null 为什么返回 "object" ?从历史事实来
说,根据Brendan Eich⾃⼰的说法,这是⽆⼼之失。但爱⺠的意⻅,这
也可以理解为null实为对象类型的特殊值。6年前我在知乎上对这种“阐
释”做了较为详细的解说。[1]
按照⼀般认知,Brendan Eich⾃⼰的说法当然是最正确和权威的。
然⽽有意思的是,前不久,在Allen Wirfs-Brock和Brendan Eich合作撰
写并提交给HOPL会议的论⽂JavaScript:The First 20 Years中写道:
…… 令⼈困惑的是, typeof null 会返回字符串值 "object" ⽽不
是"null"。其实也可以说这与Java保持了⼀致,因为Java中的所有值都
是对象,⽽null本质上是表达“没有对象”的对象……根据Brendan Eich
的回忆,typeof null的值是原始Mocha实现中“抽象泄露”的结果。null
的运⾏时值使⽤了与对象值相同的内部标记值进⾏编码,因此typeof
运算符的实现就直接返回了"object"。
——引⾃doodlewind的中⽂译本,原⽂在预印本第12⻚
这篇权威论⽂同时列出了这两种解释。所以爱⺠很多年前的阐释
也算被“官宣”了。
有⼈可能要打破砂锅问到底,到底哪⼀种才是“正确”的呢?其实
我认为都是正确的。Brendan Eich的回忆可能是历史真相,但当事⼈的
回忆不⼀定是真相的全部。我们可以追问,为什么当初在实现的时
候,对象和null共享了相同的标记值呢?⼀种解释是,可能是当年有
意识“根据Java的null值表⽰‘没有对象’,来对JavaScript中的null值进⾏
建模”的副产品,另⼀种解释是编程中⽆意产⽣的结果。即使是后⼀
种,如果考虑引擎是如何实现的,就会发现对象引⽤的内部表达肯定
是⼀个内存地址,那么很⾃然就会以全0的地址代表null。那么可以
说,导致这种“抽象泄露”本⾝的源头是⾼层模型到具体实现的⾃然映
射,偶然性中蕴含了必然性。另外,我们也可以追问,为什么当初标
准化的时候,没有对typeof null的结果提出异议呢?不太可能委员会中
的所有成员都没有发现,所以⼀个合理猜想是,发现这个问题的⼈也
采⽤了类似爱⺠的阐释对这个⾏为进⾏了“合理化”。
其实在⽇常⽣活中,有⼤量这种既是“机缘巧合”⼜“冥冥中⾃有定
数”的事例,在技术领域其实也⼀样。
这当然不是说,任意⼀种 “ 阐释 ” 都是正确的, “ 阐释 ” 本⾝得⾃
洽,然后有⾜够的解释效⼒,具有普适性,不会引发反例,引⼊⼀
种“阐释”的成本不应该⼤于收益,最后还要经得起“奥卡姆剃⼑”原则
的考验。要做到这些是⾮常困难的,有时候是难以判断的。包括本书
对JavaScript语⾔的各种“阐释”,肯定不是所有⼈都认同的,包括我⾃
⼰,对其中某些部分也会有不同意⻅。但是程序员从“码农”成⻓起
来,可以进⾏更⼤范围、更⾼层次的设计,乃⾄以成为像爱⺠那样
的“架构师”为职业⽬标,这就需要提升对各种不同“阐释”的理解判断
及融会贯通的能⼒,并逐步形成⾃⼰对技术进⾏“阐释”的能⼒。从这
点来说,这本“硬书”在那么多JavaScript书中是独具价值的。
当然,这样的“阐释”之书,啃起来不容易。借⽤⼀些⾖瓣上的吐
槽:
• …… 本来⼀个点能说清楚的 …… 跑离了却⼜想绕回来,最后弄
得这个点只有作者本⼈和少数明⽩⼈才明⽩,也不加个注释说
明。
• 书中的语⾔有些晦涩,读起来不是很流畅。
• 有⽤,但啰唆;啰唆,但有⽤ …… ⼀件简单的事情要⽤上四五
层⽐喻,还说不透。对于追求阅读快感的⼈……有点隔靴搔痒
的感觉。
这些评论绝不是恶意的,实际上这些评论者总体上都是赞许本书
的,只是被我专捡了⼀些负⾯阅读体验的词句。我⾃⼰当年读本书第1
版时也有同感。今天我读样稿时感觉倒是好了不少,可能是爱⺠做了
⼀些优化,但估计更多是随着年岁渐⻓,我本⾝的技术⽔平提升了,
对“阐释”之书的阅读能⼒也提升了。尤其这⼀年以来,亲⾝参与在
TC39之中,感受到对JavaScript的“阐释”即使在委员会⾥本⾝也是具有
多重性和不确定性的,这产⽣了很多问题,但也是活⼒的⼀部分。所
以对不同“阐释”的包容和理解,乃是必需的。
不过即使考虑阅读能⼒有所提升,本书的阅读体验和“流畅”“阅读
快感”也是不搭界的。这是读者在读本书前需要有的⼼理准备。
最后总结,“阐释”之书定然“不是所有⼈都需要的”,但我个⼈希
望这样的书可以多来⼏本。
贺师俊
2020年4⽉

在知乎上搜索“JavaScript⾥ Function也算⼀种基本类型”即可阅读该解说。
[1]
推荐序2
写给优秀程序员的⼀本书
很兴奋爱⺠兄的书⼜更新了,它专注于讲解JavaScript的语⾔精髓
与编程实践。
JavaScript是世界上最⽕的编程语⾔之⼀,可以⽤来写淘宝⽹站,
也可以⽤来写⽀付宝⼩程序,基于Electron等技术还可以⽤来写桌⾯端
应⽤。 “ 能⽤ JavaScript 实现的东⻄,迟早会⽤ JavaScript 实现 ” ,这
句“狂妄”的话,正在实现着。
看爱⺠兄的书,有⼀种很过瘾的感觉。JavaScript的每⼀个知识
点,浅学会觉得很简单,跟着书⼀步步深⼊思考,才发现⾃⼰的理解
很粗浅。书中的每⼀个章节,都是抽丝剥茧般层层深⼊,⼀个点串起
了⼀个⾯,能让知识触类旁通,⾮常透彻。
阅读本书会让我思考⼀个问题:什么样的程序员是优秀的程序
员?程序员的优秀各有各的不同,但优秀的程序员有⼀个共同的特
点,那就是充满好奇⼼。爱⺠兄的这本书,⾮常形象地阐述了什么是
好奇⼼。对于⼀个看似简单的知识点,没有好奇⼼,就会停留在知识
点的使⽤层⾯;有了好奇⼼,则会不断去深挖知识点背后的历史和成
因。JavaScript是⼀门混合范型语⾔,带着好奇⼼去学习,能看到的远
远不⽌⼀门语⾔,⽽是语⾔的世界,因为它有Java、C、LISP等各种语
⾔的⾝影。每种语⾔的优劣,是怎么被带⼊JavaScript并成为优点或者
成为“深坑”的,这种跨语⾔的对⽐探究,会让我们对语⾔特性有更深
的了解,甚⾄能重塑我们的技术价值观,对什么是好的语⾔特性,什
么是不好的语⾔特性,有更全⾯的科学判定与选择。
优秀的程序员,还有⼀个共同的特点—体系化的思维能⼒。爱⺠
兄的⽂字,像是编织美妙锦缎的针线,每⼀针每⼀线的背后,都是体
系化的思维架构。JavaScript语⾔是怎么构建起来的,在执⾏引擎层⾯
是如何运⾏的,如何⾯向对象承载⼤型应⽤,这些循序渐进的精髓讲
解与编程实践,可以让我们对JavaScript的整个“⼤厦”有全局性理解。
任何知识,只有经过体系化的理解与运⽤,才能真正内化为⼀种基础
能⼒。体系化的基础能⼒,可以让程序员⾃由遨游在编程的浩瀚宇宙
⾥。
好奇⼼与体系化思维能⼒,是优秀程序员的两⼤法宝。如果远⽅
是蔚蓝星空,好奇⼼能让我们驶向⼀个个星球,体系化思维则能让我
们的宇宙⻜船不断升级换代。编程的世界很精彩,期待每⼀位同学的
太空扬帆。
阿⾥巴巴研究员&体验科技践⾏者
王保平,阿⾥花名⽟伯
推荐序3
⼀个程序员到底需要掌握编程语⾔的多少特性?
每个程序员每天都在跟编程语⾔打交道,但是很少有⼈愿意真正
了解这些 “ ⽼朋友 ” 。有⼀些编程语⾔的⾏为⾮常反直觉,⽐如
JavaScript 中著名的 “0.1+0.2 ≠ 0.3” 的现象。它看似语⾔的 bug ,但实际
上来⾃浮点数的精度问题。正因如此,任何计算机语⾔的浮点类型都
有着相似的问题。
⽽有些语⾔特性其实根本就是设计失误,尤其是对于⼀门只花了
两个星期来设计的语⾔来说。⽐如JavaScript中的双等号,它“践踏”着
⼀切的直觉,如“==”的传递性:

⼜如if(x)与if(x==true)的等价性:

所以我相信很少有程序员想要了解“双等号两边数据类型不⼀样的
时候”的转换规则到底是什么。还有⼀些语⾔特性很有必要但是⾮常罕
⻅,⽐如在最新的JavaScript标准中加⼊了code point系列API,⽤来处
理Unicode基本平⾯(BMP)之外的字符。尽管在我⼗年的职业⽣涯
⾥,⼀次都没有遇到过BMP之外的字符,然⽽这并不意味着它们不重
要。
在你不知道的⾓落,⼀些你不知道的特性在被你⽤不知道的⽅式
使⽤着。以前我在参与 es-discuss 邮件组讨论时,曾经⾮常冒昧地建
议“函数调⽤与其后括号间不得加⼊换⾏规则”(即no line terminator规
则)。但是很快收到回复,这样做会破坏⼀些既有代码,⽐如有⼀些
奇思妙想的框架⽤下⾯的⽅式⽣成HTML:

这让我意识到,语⾔设计需要考虑的情况是极端和复杂的,⼀些特性
对某些⼈来说⽆关紧要,但对另⼀些⼈来说是⽣命线。
今天,很多语⾔特性决定了技术产品的⾛向,⽐如Vue 3.0,它⾮
常依赖Proxy特性。⽐起getter和setter实现的Vue 2.0,它对模型的侵⼊
性更低,边缘case也更少。⽽从历史来看,在过去的⼏⼗年⾥,多数开
发者只需要掌握他们关⼼的⼀部分特性就可以了,甚⾄可以躲在框架
之上进⾏开发。
现在情况正在发⽣变化。在TC39,⼀些将会陪伴你职业⽣涯数⼗
年的新特性,正在被针锋相对地讨论,⽽⽀持或者反对它们的理由可
能与你不太相关—你必须从整体上理解语⾔的设计,才有参与其中的
可能。即使多数程序员不需要参与这样的讨论,如今语⾔的更新速度
也对程序员的素质提出了更⾼的要求,从ES5到ES2018,语⾔标准的表
述篇幅增加到原来的三倍,这样的信息增⻓速度堪称恐怖。
所以,今天,编程语⾔学习的门槛客观上提⾼了,唯有站在更⾼
的视⾓,跳出语⾔本⾝的约束,才能更好地应对莫测的未来。
我们讨论或者解释JavaScript的问题时,⼤多会引⽤标准的描述,
⽐如执⾏上下⽂、变量环境、词法环境等,但是这些概念始终在变
化。然⽽若我们以结构化程序设计的⾓度去看,不论是原有的函数
级、全局作⽤域,还是新加⼊的模块、let级别的作⽤域,都没有跳出
⼀般的结构化的思路。所以说,底层不等于本质,我们从更通⽤的⾓
度去看待JavaScript,就会更容易理解它。尤其是,JavaScript是追求实
⽤性的语⾔,它并没有试图像Haskell、Rust那样从语⾔⾓度做本质创
新。
在我和我周围,很多前端⼯程师认识周爱⺠⽼师都是从他在2007
年左右发布的系列博⽂ “JavaScript ⾯向对象编程 ” 开始的。从那时候
起,周⽼师对语⾔的研究就总是早于这些特性的⼤规模应⽤。作为架
构师,周⽼师的思路总是能够给我们前端带来⼀些新的灵感。在这⼀
次的改版中,周⽼师⼜为图书加⼊了不少新内容(⽐如关于并⾏特性
的部分),我很期待这些新内容在未来成为每个前端程序员的新武
器。
程劭⾮(winter)
2020年01⽉
第3版 代序
什么叫“会编程”
—《程序原本》节选—
程序设计语⾔—这种⼯具有什么性质呢?⼜或者,究竟是什么决
定了⼀门语⾔称为Java,⽽另⼀门叫作C#呢?它们之间存有何种不
同,⼜存有哪些渊源呢?
有趣的是,通过分析现有的种种程序设计语⾔,(正因为这些语
⾔是我们⼈类⾃⼰创造的,所以)我们发现如同⼈类的⾃然语⾔⼀
样,程序设计语⾔也总是有着三种基本性质:语法、语义与语⽤。[1]
正是这三种性质,使得⼀种语⾔区别于其他语⾔,⽽⼜能从其他语⾔
那⾥有所借鉴,以及实现彼此沟通。
那么我们先来谈谈什么是语法。语法,是指我们表达内容的形
式。这⼀形式⾸先与不同的表达⼿段有关,例如同⼀个意思,⼝头表
达和书⾯表达是不同的。其次,即使表达⼿段相同,也会因为介质的
材料性质存有差异⽽导致形式不同,例如钟⿍⽂和⽩话⽂都⽤于书
写,但显然钟⿍⽂不能像⽩话⽂那样冗⻓。类似地,在我们的程序设
计语⾔中,早期的程序输⼊就是电⼦开关的开合,因此代码会是⼀些
操作命令,⽽现在我们可以将之输⼊为接近⾃然语⾔的程序⽂本;早
期的运⾏环境要求代码必须尽量精简,⽽现在我们则考虑通过规整⽽
冗⻓的代码来降低⼯程整体的复杂性。
所以,语法是对语⾔的表达⼿段,以及对该表达⼿段的条件限制
加以综合考虑⽽设定的⼀种形式化的规则。⽽所谓语义,则是指我们
表达内容的逻辑含义。语义有以下基本性质:
■ ⼀、必须是⼀个含义。[2]
■ ⼆、该含义必须能够以某种基本的逻辑形式予以阐述。
语义还有⼀项⾮必需的性质,即:
■ 三、上述逻辑所表达的含义可以为语⾔的接受者所知。
略为讨论⼀下第⼆项性质。为何语义必须要能阐述为⼀种基本逻
辑呢?因为语义定义为内容的含义,⽽这种含义可以由多种形式来表
现,因此,如果它不能⽤⼀种基本逻辑来表达,也就没有办法在多种
表现形式之间对它互做验证。例如,不能⽤书写的⽅式来确定⼝头转
述的正确性,反之也不能通过⼝传⼼授来传播书本知识。⾃然语⾔中
的这种性质(部分地)可以由基本逻辑的⽭盾律来约束,即“⼀个概念
不能既是该概念,⽽⼜⾮该概念”。正是因为我们的⽂字记录与对话交
流等内容中存在着这样的⼀些基本逻辑,所以它才可能科学、严谨及
正确。
第三项性质对⾃然语⾔来说是⾮必需的—如果⼀个⼈⾃⾔⾃语,
那么他的⾔语可能仍然是有语义的,只是这个语义不为他⼈所知。但
这⼀点对于程序设计语⾔来说却是必需的,因为我们设计这样⼀门语
⾔的⽬的,正是要让我们所表达的含义为计算机所知。
正是这第三项性质,加⼊了对“接受者的理解能⼒”的限制。出于
语义的前两项基本性质,这种理解能⼒也必然由两个⽅⾯构成,⼀是
指含义,⼆是指逻辑。于是我们看到了我们曾经讨论过的全部内容:
计算系统的要素,包括数、数据和逻辑,以及在此基础上进⾏正确计
算的⽅法的抽象,即计算范式。只有通过这些组织起来的语义,才可
能被(我们此前所述的)计算系统理解。
这些语义与其表现形式(即语法)是⽆关的,有其基本逻辑存
在。我们所谓的“会编程”,正是指对这种语义的理解,⽽⾮对某种语
法的熟悉。正因如此,我们才可以在Java上实现某个程序,⼜在C#上
同样实现它,在(使⽤这些语⾔的)类似的仿制过程中,不变的是语
义。[3]
因此再进⼀步观察,编程这样的⾏为也就⽆⾮是将我们的意图表
达为计算系统的理解能⼒范围内的语义罢了。归纳起来看,这种语
义:
■ 由计算系统与程序员共同确知的数据与逻辑构成;且,
■ 最终可以由某种计算⽅法在指定计算系统上实施以得到计算结果。
这⾥的计算⽅法并不是指“算法”,⽽是指对某种计算实施过程的
抽象,例如“命令式”和“函数式”这两种计算范式。所以,会编程与掌
握某种语⾔的语法形式是⽆关的。
编程实质上是⼀种在语义描述上的能⼒修养。具备这种能⼒之
后,语法也就只存在⼀些规则、限制和对不同计算系统的理解能⼒上
的差别了。所以,“计算机程序设计”这门功课应该教你编程,⽽不是
教你使⽤⼀门具体的语⾔—我们现在⼤多把它当成语⾔课,实在是本
末倒置了。
周爱⺠
2012年6⽉于《程序原本》

[1] 莫⾥斯(C.W.Morris)在他于1938年出版的《符号理论基础》⼀书中,最早将语法学(syntaotics或syntax)、语义
学(semantics)、语⽤学(pragmatics)明确地作为符号学的三个分⽀,从⽽构成了现代语⾔学研究的三个主要⽅⾯。
[2] 概念或实体。即,在表达者的意识中需要表达的对象。
[3] 这也意味着,语义上的表达能⼒决定了⼀门语⾔是否真正有别于其他语⾔。语义能⼒上等价的语⾔,除了开发⼈员
的喜好或运⾏平台的限制之外,所谓有益的价值仅是开发库的丰富与社区的活跃等。⽽所有这些,都是与语⾔的本质⽆
关的。
第2版 代序
要有光
—《世界需要⼀种什么样的语⾔》节选—
什么才是决定语⾔的未来的思想呢?或者我们也可以换个⾓度来
提出这个问题:世界需要⼀种什么样的语⾔?
特性众多、适应性强,就是将来语⾔的特点吗?我们知道,现在
的C#与Java都在向这⼀⽬标前进。与特定的系统相关,就是语⾔的出
路吗?例如,曾经的VC++,以及它⾯向不同平台的版本。当然,在类
似的领域中,还有C,以及汇编……
这些列举其实都是在特定环境下的特定语⾔,所不同的⽆⾮是环
境的⼤⼩。这其实也是程序员的⼼病:我们到底选Windows平台,还
是Java平台,或者Linux系统,再或者是……我们总是在不同的⼚商及
其⽀持的平台中选择,⽽最终这种选择⼜决定了我们所使⽤的语⾔。
这与喜好⽆关,也与语⾔的好坏⽆关,不过是⼀种趋利的选择罢了。
所以也许你在使⽤着的只是⼀种“并不那么‘好’”,以及并不能令你那
么开⼼的编程语⾔。你越发⾟勤地⼯作,越发地为这些语⾔摇旗⿎
噪,你也就离语⾔的真相越来越远。
当然,这也不过是⼀种假设。但是,真相不都是从假设开始的
吗?
语⾔有些很纯粹,有些则以混杂著称。如果编程世界只有⼀种语
⾔,⽆论它何等复杂,也必因毫⽆⽐较⽽显得⾜够纯粹。所以只有在
多种语⾔之间进⾏⽐较,才会有纯粹或混杂这样的效果:纯粹与混杂
总是以⼀种或多种分类法为背景来描述的。
因此我们了解这些类属概念的标准、原则,也就回溯到了语⾔的
本质:它是什么、怎么样,以及如何⼯作。在这本书中,将这些分类
回溯到三种极端的对⽴:命令式与说明式,动态与静态,串⾏与并
⾏。分离它们,并揭⽰将它们混沌⼀物的⽅法与过程,如历经涅槃。
在这⼀经历中,这本书就是我的所得。
多年以来,我在我所看不⻅的⿊暗与看得⻅的梦境中追寻着答
案。这本书是我最终的结论,或结论⾯前的最后⼀层表象:我们需要
从纯化的语⾔中领悟到编程的本质,并以混杂的语⾔来创造我们的世
界。我看到:局部的、纯化的语⾔可能带来独特的性质,⽽从全局来
看,世界是因为混杂⽽变得有声有⾊的。如果上帝不说“要有光”,那
么我们将不能了解世象之表;⽽世象有了表⾯,便有了混杂的⾊彩,
我们便看不⻅光之外的⼀切事物。我们依赖于光明,⽽事实是光明遮
住了⿊暗。
如同你现在正在使⽤的那⼀种、两种或更多种语⾔,阻碍了你看
到你的未来。
周爱⺠
2009年1⽉于本书精简版序
第1版 代序
学两种语⾔
—《我的程序语⾔实践》节选—
《程序设计语⾔—实践之路》⼀书对“语⾔”有⼀个分类法,将语
⾔分类为“说明式”与“命令式”两种。Delphi及C、C++、Java、C#等都
被分在“命令式”语⾔范型的范畴,“函数式”语⾔则是“说明式”范型中
的⼀种。如今我回顾⾃⼰对语⾔的学习,其实⼗年也就学会了两种语
⾔:⼀种是命令式的Pascal/Delphi,另⼀种则是说明式的JavaScript。
当然,从语⾔的实现⽅式来看,⼀种是静态的,⼀种是动态的。
这便是我程序员⽣涯的全部了。
我毕竟不是计算机科学的研究者,⽽只是其应⽤的实践者,因此
我从⼀开始就缺乏在“程序”的某些科学的或学术层⾯上的认识是很正
常的。也许有些⼈⼀开始就认识到程序便是如此,或者⼀种语⾔就应
当是这样构成和实现的,那么他可能是从计算机科学⾛向应⽤的,故
⽽⽐我了解得多⼀些。⽽我,⼤概在⼗年前学习编程及在后来很多年
的实践中,仅被要求“写出代码”⽽从未被要求了解“什么是语⾔”。所
以我才会后知后觉,才会在很⻓的时间⾥迷失于那些精细的、沟壑纵
横的语⾔表⾯⽽不⾃知。然⽽⼀如我现在所⻅到的,与我曾相同地⾏
进于那些沟壑的朋友,仍然在持续地迷惑着、盲⽬着,全然⽆觉于沟
壑之外的瑰丽与宏伟。
前些天我写过⼀篇博客,是推荐那篇《⼗年学会编程》的。那篇
⽂章道出了我在⼗年编程实践之后,对程序语⾔的最深刻的感悟。我
们学习语⾔其实不必贪多,深⼊⼀两种就可以了。如果在⼀种类型的
语⾔上翻来覆去,例如,不断地学C、Delphi、Java、C#……⽆⾮是
求⽣存、讨⽣活,或者⽤以装点个⼈简历,于编程能⼒提⾼的作⽤是
不⼤的。更多的⼈,因为⾯临太多的语⾔选择⽽浅尝辄⽌,多年之后
仍远离程序根本,成为书写代码的机器,把书写代码的⾏数、程序个
数或编程年限作为简历中最显要的成果。这在明眼⼈看来,不过是熟
练的“砌砖⼯”⽽已。
我在《⼤道⾄简》中说“如今我已经不再专注于语⾔”。其实在说
完这句话之后,我就已经开始了对JavaScript的深⼊研究。在如此深⼊
地研究⼀种语⾔,进⽽与另⼀种全然有别的语⾔进⾏⽐较之后,我
对“算法+结构=程序”有了更深刻的理解与认识—尽管这句名⾔从来未
因我的认识⽽变化过,从来未因说明与命令的编程⽅式⽽变化过,也
从来未因动态与静态的实现⽅法⽽变化过。
动静之间,不变的是本质。我之所以写这篇⽂章,并⾮想说明这
种本质是什么抑或如何得到,只是期望读者能在匆忙的⾏⾛中,时⽽
停下脚步,远远地观望⼀下⽬标罢了。
⽽我此刻,正在做⼀个驻⾜观望的路⼈甲。
周爱⺠
2007年11⽉于个⼈博客
前⾔
语⾔
语⾔是⼀种交流⼯具,这约定了语⾔的 “ ⼯具 ” 本质,以及 “ 交
流”的功⽤。“⼯具”的选择只在于“功⽤”是否能达到,⽽不在于⼯具是
什么。
在数千年之前,远古祭师⼿中的神杖就是他们与神交流的⼯具。
祭师让世⼈相信他们敬畏的是神,⽽世⼈只需要相信那柄神杖。于
是,假如祭师不⼩⼼丢掉了神杖,就可以堂⽽皇之地再做⼀根。甚
⾄,他们可以随时将旧的换成更新的或更旧的神杖,只要他们宣称这
是⼀根更有利于通神的神杖。对此,世⼈往往做出迷惑的表情或者欢
欣⿎舞的姿态。今天,这种表情或姿态⼀样会出现在⼤多数程序员听
闻新计算机语⾔被创⽣的时刻。
神杖换了,祭师还是祭师,世⼈还是会把头叩得⼭响。祭师掌握
了与神交流的⽅法(如果真如同他们⾃⼰说的那样),⽽世⼈只看⻅
了神杖。
所以,泛义的⼯具是⽂明的基础,⽽确指的⼯具却是愚⼈的器
物。
分类法
在我看来,在JavaScript的进化中存在着两种与分类法相关的核⼼
动⼒:⼀种促使我们不断地创造并特化某种特性,另⼀种则不断地混
合种种特性。更进⼀步地说,前者在于产⽣新的分类法以试图让语⾔
变得完美,后者则通过混淆不同的分类法,以期望通过突变⽽产⽣奇
迹。
⼆者相同之处在于都需要更多的分类法。于是我们看到,在⼆⼗
年之后,JavaScript语⾔中有了动态的、静态的、命令式的、说明式
的、串⾏的、并⾏的等特性。然⽽抛开所有这些致⼒于“创⽣⼀种新语
⾔”的魔法,到底有没有让我们在这浩如烟海的语⾔家族中,找到学习
⽅法的魔法呢?
我的答案是:看清语⾔的本质,⽽不是试图学会⼀门语⾔。当
然,这看起来⾮常概念化。甚⾄有⼈说我可能是从某本教材中抄来
的,另外⼀些⼈会说我试图在这本书⾥宣讲类似我那本《⼤道⾄简》
⾥的⽼庄学说[1]。
其实我感觉很冤枉。我想表达的意思不过是:如果你想把⼀副牌
理顺,最好的法⼦,是回到它的分类法上,要么从A到K整理,要么按
四个花⾊整理。[2]毕竟,两种或更多种分类法作⽤于同⼀事物,只会
使事物混淆⽽不是弄得更清楚。
这本书
时⾄今⽇,离这本书第1版的发布已经过去⼗多年的时间了。我承
认在之前的版本中,许多内容是通过对引擎或解释器源码的分析,以
及对⼀些语⾔特性的表现进⾏反推⽽得来的。因此早期的⼀些内容并
不能深刻、准确地反映JavaScript语⾔中的事实,⼜或者存在错误。更
关键的地⽅在于,并没有什么资料可以给出确定的事实或指出这些错
误。如此,以⾄于在本书第2版发布时,我也只是匆匆地添加了⼀些有
关ECMAScript 5(ECMAScript也简称为ES)规范中的内容,⽽未能对
全书进⾏及时更新。
事实上我当时并没有看到ES5的伟⼤之处。后来随着ECMAScript
新版本的推出,ES5中所蕴含的⼒量渐渐释放出来,随着ES6⼀直演进
到现在的ES2019,我们⻅证了JavaScript最有活⼒、最精彩的时光。然
⽽这本书早期版本中的内容也渐渐蒙尘,成为故纸堆中的不实传⾔。
于是,我终于下定决⼼,围绕ECMAScript来重新解释整个JavaScript核
⼼,并在整本书的“多语⾔范型的整合”的⼤框架下重新开始写它的第3
版,即你现在读到的这个版本。这显然意味着我在这⼀版中将更加尊
重ECMAScript规范,并同时降低了对引擎差异性的关注。另外,我对
书中“编程实践”的部分也进⾏了重新规划,让它们分散于每章的末
尾,以便读者可以有选择地阅读,以及有针对性地分析这些实践案
例。
然⽽⽆论如何,这本书都不是⼀本让你“学会某种语⾔”的书,也
不是⼀本让初学者“学会编程”的书。阅读本书,你⾄少应该有⼀点编
程经验,⽽且要摈弃某些偏⻅(例如,C语⾔天下⽆敌或JavaScript是
新⼿玩具等)。
最后,你还要有很多耐⼼与时间。
问题
1.这本书可能会在不同章节反复讲同⼀个问题,这是因为从不同
的视⾓看相同的问题,其实结论并不相同(⽽JavaScript正好是⼀门多
范型的语⾔)。
2 .这本书会有极少数内容是与 ECMAScript 或现实中的特定运⾏
期环境不同的,如果存在这种情况,本书⼀定会详述其缘由。
3.这本书重在解释原理,⽽不是实践。
4.这本书与许多同类书相⽐,有着⾮常多的废话—尤其对于那些
打算通过这本书学习如何使⽤JavaScript的读者来说。但这本书的特
点,或许就在于说了⼀门具体语⾔之外的许多废话。
5 .从纯粹讨论 “ 如何使⽤ JavaScript” 的⾓度来讲,本书在功能点
上写得有些碎⽚化,这会导致许多内容中出现指向其他章节的交叉引
⽤。这是本书从多语⾔范型⾓度对知识结构进⾏重新规划的结果。
为什么
⽆论是出于作者的⾝份,还是之于读者的期望,我都希望你在阅
读本书的过程中能多问⼏个“为什么”。有疑与设疑,是本书与他书在
⽴⾜与⾏⽂上的根本不同。
例如,在JavaScript中,函数参数是允许重名的,但是⼀旦使⽤了
默认参数,就不允许重名了。关于这个问题,在ECMAScript中是有讲
解的,它详细地⽤算法约定了这个语⾔特性。并且如果你深究⼀下,
还会发现函数参数的初始化可以分成两类:绑定变量名和绑定初始
器,⼀旦启⽤后⼀种⽅式,那么函数参数就不能重名了。再进⼀步,
你会发现这个“初始器”是通过⼀个类似“键值对”的表来保存参数名和
初始化表达式的,因为键不能重复,所以参数名也就不能重复……
是的,我们确实可以通过精读ECMAScript来知道上述特性,了解
它的成因和原理。然⽽倘若我们多问⼀下“为什么它这么设计”,⼤多
数⼈就答不出来了。
因为ECMAScript中根本没有写。ECMAScript只说了“如何实现”,
从来没说“为什么这么设计”。这就好像有⼀本制造⼿册放在你的⼿
边,即便你精读每⼀章、研习每⼀节,其最终结果也只能做到“精确地
制造”,⽽这个东⻄为什么造成这个样⼦,⼜或者某⼀个参数设置为什
么是5.01⽽不是4.99,你永远也不知道。
例如这个问题:为什么“允许重名”这个特性不⻅了?
历史
■ 2020.06《JavaScript语⾔精髓与编程实践》(第3版)(当前版本)
本书第 3 版邀请了贺师俊( hax )、王保平(⽟伯)和程劭⾮
(winter)三位⽼师为本书写推荐序,另外节选了《程序原本》
⼀书的内容作为本书代序,并⼤幅更新了前⾔。全书内容重写与
重校,数易其稿,历时三年终成。
本书新添加了第4章和第7章,分别讨论静态语⾔特性(主要是指
结构化的⽅法与基本原理),以及并⾏语⾔特性。后者的部分内
容涉及并发特性及其实现。在这⼀版中,将之前版本中关于“编程
实践”的⼤章删除,分散在各章后分别讨论实践案例。
■ 2012.03《JavaScript语⾔精髓与编程实践》(第2版)
本书第2版节选了《动态函数式语⾔精髓》⼀书的序作为代序。主
要添加了ES5相关的内容,并将“编程实践”中的内容从Qomo项⽬
替换为QoBean项⽬。
这是⼀个改动较少的修订版本。
■ 2009.03《动态函数式语⾔精髓》(电⼦书)
这本电⼦书是作为本书第1版的精简版由InfoQ发布的。与《主要
程序设计语⾔范型综论与概要》类似,这本电⼦书回归了我原本
著述本书的⽬的,希望能通过对JavaScript的深⼊研究来切⼊对语
⾔本质的讨论。
正是这些关于语⾔的探索,最终帮助我完成了《程序原本》⼀书
(2012—2016年)。
■ 2008.10《主要程序设计语⾔范型综论与概要》(电⼦书)
这是⼀份对本书第1版的摘引,并作为⼀本独⽴电⼦书发布。主要
侧重于语⾔范型的综论,针对JavaScript的相关讨论较少。
■ 2008.03《JavaScript语⾔精髓与编程实践》第1版
本书正式发⾏。
惯例
1.类名或构造器函数名以⼤写字符开始,例如,MyClass。
2.变量名或⼀般函数名以⼩写字符开始,例如,myObject。
3.关键字或引⽤代码中的变量名使⽤等宽字体,例如,yield。
4.正⽂中的英⽂采⽤⼀般字体,例如,JavaScript。
5.⽅法名或函数名在引⽤时会加括号,如apply(),如果不使⽤括
号,则表明它们在上下⽂中应该被理解为属性、构造器名或类
名,例如,obj.constructor。
6 .对象内部⽅法(通常在 ECMAScript 中规定)会以⼀对⽅括号
标⽰,例如,[[call]]。
7 .若⾮特殊说明, ES5/ES5.1 分别指 ECMA-262 edition 5/5.1 ,
ES6/ES7/ES8分别指ECMA-262 edition 2015/2016/2017。
8.为了避免⾏⽂中不断出现“从ESx版本开始,⽀持某某特性”的
字样,本书将基于 ES2019 讲述,但在第 3 章与第 6 章的实践
中,部分ECMAScript规范章节编号指向的是ES2017。
9 .所有在 JavaScript ⽰例代码中出现的名称都是按照 JavaScript 惯
例命名的,如⼀般标识符以⼩写字符开始,类、单例类或构造
器以⼤写字符开始;不使⽤下画线作为分隔符。但是,如果⼀
个变量声明的⽬的是表明某种强调的语义效果,或是⼀个未经
实现的⼯具函数/状态,那么它将使⽤下画线来分隔,并尽量
表达⼀个有完整语义的定义。如果⼀个声明以下画线开始,那
么它将表达ECMAScript规范中的例程,或引擎实现中的内部
例程(使⽤下画线的标识符,在源代码中也可能会以斜体表
⽰)。
10.源代码中的斜体字通常⽤于表达语法概念,⽽⾮⼀个实际可
⽤的标识符或声明。
读者服务
微信扫码回复:38669

■ 获取博⽂视点学院20元付费内容抵扣券
■ 获取免费增值资源
■ 获取精选书单推荐
■ 加⼊本书读者交流群,与作者互动

[1] 《⼤道⾄简》是⼀本软件⼯程⽅⾯的图书,但往往被⼈看成医学书籍或有⼈希望从中求取养⽣之道。你可以在我的
Git 仓库(aimingoo/my-ebooks)中下载这本书的电⼦版本。
[2] 不过这都将漏掉两张王牌。这正是问题之所在,因为如果寻求“绝对⼀分为⼆的⽅法”,那么应该分为“王牌”和“⾮王
牌”。但这往往不被程序员或扑克牌玩家所采⽤,因为极端复杂性才是他们追求的⽬标。
⽬录
推荐序1 ⼀本不是所有⼈都需要的好书
推荐序2 写给优秀程序员的⼀本书
推荐序3
第3版 代序
第2版 代序
第1版 代序
前⾔
第1章 ⼆⼗年来的JavaScript
1.1 ⽹⻚中的代码
1.1.1 新鲜的玩意⼉
1.1.2 写在⽹⻚中的第⼀段代码
1.1.3 最初的价值
1.2 ⽤JavaScript来写浏览器上的应⽤
1.2.1 我要做⼀个聊天室
1.2.2 Flash的⼀席之地
1.2.3 RWC与RIA之争
1.3 没有框架与库的语⾔能怎样发展呢
1.3.1 做⼀个框架
1.3.2 重写框架的语⾔层
1.3.3 富浏览器端开发(RWC)与AJAX
1.4 语⾔的进化
1.4.1 Qomo的重⽣
1.4.2 QoBean是对语⾔的重新组织
1.4.3 JavaScript作为⼀门语⾔的进化
1.5 ⼤型系统开发
1.5.1 框架与架构是不同的
1.5.2 ⼤型系统与分布式的环境
1.5.3 划时代的ES6
1.6 为JavaScript正名
1.6.1 JavaScript
1.6.1.1 Core JavaScript
1.6.1.2 SpiderMonkey JavaScript
1.6.1.3 JScript
1.6.2 ECMAScript
1.7 JavaScript的应⽤环境
1.7.1 宿主环境
1.7.2 外壳程序
1.7.3 运⾏期环境
1.7.4 兼容环境下的测试
第2章 JavaScript的语法
2.1 语法综述
2.1.1 标识符所绑定的语义
2.1.2 识别语法错误与运⾏错误
2.2 JavaScript的语法:声明
2.2.1 变量的数据类型
2.2.1.1 基本数据类型
2.2.1.2 宿主定义的其他对象类型
2.2.1.3 值类型与引⽤类型
2.2.1.4 讨论:ECMAScript的类型系统
2.2.2 变量声明
2.2.2.1 块级作⽤域的变量声明与⼀般var声明
2.2.2.2 ⽤赋值模板声明⼀批变量
2.2.3 使⽤字⾯量⻛格的值
2.2.3.1 字符串字⾯量、转义符
2.2.3.2 模板字⾯量
2.2.3.3 数值字⾯量
2.2.4 其他声明
2.2.4.1 常量声明
2.2.4.2 符号声明
2.2.4.3 函数声明
2.3 JavaScript的语法:表达式运算
2.3.1 ⼀般表达式运算
2.3.1.1 逻辑运算
2.3.1.2 字符串运算
2.3.1.3 数值运算
2.3.2 ⽐较运算
2.3.2.1 等值检测
2.3.2.2 序列检测
2.3.3 赋值运算
2.3.3.1 赋值的语义
2.3.3.2 复合赋值运算符
2.3.3.3 解构赋值
2.3.4 函数相关的表达式
2.3.4.1 匿名函数与箭头函数
2.3.4.2 函数调⽤
2.3.4.3 new运算
2.3.5 特殊作⽤的运算符
2.3.5.1 类型运算符(typeof)
2.3.5.2 展开语法(spread syntax)
2.3.5.3 ⾯向表达式的运算符
2.3.6 运算优先级
2.4 JavaScript的语法:语句
2.4.1 表达式语句
2.4.1.1 ⼀般表达式语句
2.4.1.2 赋值语句与隐式的变量声明
2.4.1.3 函数调⽤语句
2.4.2 变量声明语句
2.4.3 分⽀语句
2.4.3.1 条件分⽀语句(if语句)
2.4.3.2 多重分⽀语句(switch语句)
2.4.4 循环语句
2.4.5 流程控制:⼀般⼦句
2.4.5.1 标签声明
2.4.5.2 break⼦句
2.4.5.3 continue⼦句
2.4.5.4 return⼦句
2.4.6 流程控制:异常
2.5 JavaScript的语法:模块
2.5.1 模块的声明与加载
2.5.1.1 加载模块
2.5.1.2 声明模块
2.5.2 名字空间的特殊性
2.5.2.1 名字空间的创建者
2.5.2.2 名字空间中的名字是属性名
2.5.2.3 使⽤上的⼀些特殊性
2.6 严格模式下的语法限制
2.6.1 语法限制
2.6.2 执⾏限制
2.6.3 严格模式的范围
2.6.3.1 有限范围下的严格模式
2.6.3.2 ⾮严格模式的全局环境
2.7 运算符的⼆义性
2.7.1 加号“+”的⼆义性
2.7.2 括号“()”的⼆义性
2.7.3 冒号“:”与标签的⼆义性
2.7.4 ⼤括号“{}”的⼆义性
2.7.4.1 复合语句/语句块
2.7.4.2 声明对象字⾯量
2.7.4.3 函数声明
2.7.4.4 结构化异常
2.7.4.5 模板中的变量引⽤
2.7.4.6 解构赋值
2.7.5 逗号“,”的⼆义性
2.7.6 ⽅括号“[]”的⼆义性
2.7.7 语法设计中对⼆义性的处理
第3章 JavaScript的⾯向对象语⾔特性
3.1 ⾯向对象编程的语法概要
3.1.1 对象声明与实例创建
3.1.1.1 使⽤构造器创建对象实例
3.1.1.2 声明对象字⾯量
3.1.1.3 数组及其字⾯量
3.1.1.4 正则表达式及其字⾯量
3.1.1.5 在对象声明中使⽤属性存取器
3.1.2 使⽤类继承体系
3.1.2.1 声明类和继承关系
3.1.2.2 声明属性
3.1.2.3 调⽤⽗类构造⽅法
3.1.2.4 调⽤⽗类⽅法
3.1.2.5 类成员(类静态成员)
3.1.3 对象成员
3.1.3.1 成员的列举,以及可列举性
3.1.3.2 对象及其成员的检查
3.1.3.3 值的存取
3.1.3.4 成员的删除
3.1.3.5 ⽅法的调⽤
3.1.4 使⽤对象⾃⾝
3.1.4.1 与基础类型数据之间的运算
3.1.4.2 默认对象的指定
3.1.5 符号
3.1.5.1 列举符号属性
3.1.5.2 改变对象内部⾏为
3.1.5.3 全局符号表
3.2 JavaScript的原型继承
3.2.1 空(null)与空⽩对象(empty)
3.2.1.1 空⽩对象是所有对象的基础
3.2.1.2 构造复制?写时复制?还是读遍历?
3.2.1.3 构造过程:从函数到构造器
3.2.1.4 内置属性与⽅法
3.2.1.5 原型为null:“更加空⽩”的对象
3.2.2 原型链的维护
3.2.2.1 外部原型链与constructor属性
3.2.2.2 使⽤内部原型链
3.2.3 原型继承的实质
3.2.3.1 简单模型
3.2.3.2 基于原型继承的设计⽅法
3.2.3.3 如何理解“继承来的成员”
3.3 JavaScript的类继承
3.3.1 类是静态的声明
3.3.2 super是全新的语法元素
3.3.2.1 super的作⽤
3.3.2.2 super指向什么
3.3.2.3 super对⼀般属性的意义
3.3.2.4 super在两种继承关系中的⽭盾
3.3.2.5 super的动态计算过程
3.3.3 类是⽤构造器(函数)来实现的
3.3.4 ⽗类的默认值与null值
3.4 JavaScript的对象系统
3.4.1 封装与多态
3.4.1.1 封装
3.4.1.2 多态
3.4.1.3 多态与⽅法继承
3.4.2 属性
3.4.2.1 ⽅法
3.4.2.2 事件
3.4.3 构造对象系统的⽅法
3.4.3.1 类抄写
3.4.3.2 原型继承
3.4.3.3 类继承
3.4.3.4 直接创建对象
3.4.3.5 如何选择继承的⽅式
3.4.4 内置的对象系统
3.4.4.1 早期规范(ES5之前)中的对象
3.4.4.2 集合对象
3.4.4.3 结构化数据对象
3.4.4.4 反射对象
3.4.4.5 其他
3.4.5 特殊效果的继承
3.5 可定制的对象属性
3.5.1 属性描述符
3.5.1.1 数据描述符
3.5.1.2 存取描述符
3.5.1.3 隐式创建的描述符:字⾯量⻛格的对象或类
声明
3.5.2 定制对象属性
3.5.2.1 给属性赋值
3.5.2.2 使⽤属性描述符
3.5.2.3 取属性或属性列表
3.5.3 属性表的状态
3.6 运⾏期侵⼊与元编程系统
3.6.1 关于运⾏期侵⼊
3.6.1.1 运⾏期侵⼊的核⼼机制
3.6.1.2 可被符号影响的⾏为
3.6.1.3 内部⽅法与反射机制
3.6.1.4 侵⼊原型
3.6.2 类类型与元类继承
3.6.2.1 原⼦
3.6.2.2 元与元类
3.6.2.3 类类型系统
3.6.2.4 类类型的检查
3.6.2.5 类类型的声明以及扩展特性
3.6.3 元编程模型
第4章 JavaScript语⾔的结构化
4.1 概述
4.1.1 命令式语⾔
4.1.1.1 存储与数据结构
4.1.1.2 结构化编程
4.1.1.3 结构化的疑难
4.1.2 ⾯向对象语⾔
4.1.2.1 结构化的延伸
4.1.2.2 更⾼层次的抽象:接⼝
4.1.2.3 ⾯向接⼝的编程⽅法
4.1.3 再论语⾔的分类
4.1.3.1 对语⾔范型的简化
4.1.3.2 结构化的性质
4.1.4 JavaScript的语源
4.2 基本的组织元素
4.2.1 标识符
4.2.2 表达式
4.2.2.1 字⾯量
4.2.2.2 初始器
4.2.3 语句
4.2.4 模块
4.2.5 组织的原则
4.2.5.1 原则⼀:抑制数据的可变性
4.2.5.2 原则⼆:最⼩逻辑和最⼤复⽤
4.2.5.3 原则三:语法在形式上的清晰与语义⼀致性
4.3 声明
4.3.1 声明名字
4.3.2 确定性
4.3.3 顶层声明
4.4 语句与代码分块
4.4.1 块
4.4.1.1 简单语句
4.4.1.2 单值表达式
4.4.2 块与语句的语法结构
4.4.2.1 语义上的代码分块
4.4.2.2 分⽀逻辑中的代码分块
4.4.2.3 多重分⽀逻辑中的代码分块
4.4.2.4 循环逻辑中的代码分块
4.4.2.5 异常中的代码分块
4.4.3 块与声明语句
4.4.3.1 只能在块中进⾏数据声明
4.4.3.2 能同时声明块的声明语句
4.4.3.3 声明语句与块的组织
4.4.4 块与语句的值
4.4.4.1 语句的执⾏状态
4.4.4.2 语句⽆值
4.4.4.3 语句有值
4.4.5 标签化语句与块
4.5 组织形式分块的⽅法
4.5.1 词法作⽤域
4.5.1.1 不存在“级别1:表达式”
4.5.1.2 级别2:语句
4.5.1.3 级别3:函数
4.5.1.4 级别4:模块
4.5.1.5 级别5:全局
4.5.2 执⾏流程及其变更
4.5.2.1 级别1:可能的逃逸
4.5.2.2 级别2:“break<label>;”等语法
4.5.2.3 级别3:return⼦句
4.5.2.4 级别4:动态模块与Promise中的流程控制
4.5.2.5 级别5:throw语句
4.5.3 词法作⽤域之间的相关性
4.5.4 执⾏流程变更的内涵
4.6 层次结构程序设计
4.6.1 属性的可⻅性
4.6.1.1 属性在继承层次间的可⻅性
4.6.1.2 属性在继承树(⼦树)间的可⻅性
4.6.2 多态的逻辑
4.6.2.1 super是对多态逻辑的绑定
4.6.2.2 super是⼀个作⽤域相关的绑定
4.6.3 私有作⽤域的提出
4.7 历史遗产:变量作⽤域
4.7.1 变量作⽤域
4.7.1.1 级别3:函数(局部变量)
4.7.1.2 级别4:模块
4.7.1.3 级别5:全局变量
4.7.2 变量的特殊性与变量作⽤域的关系
4.7.2.1 变量提升
4.7.2.2 变量动态声明
4.7.2.3 变量隐式声明(全局属性)
4.8 私有属性与私有字段的纷争
4.8.1 私有属性的提出
4.8.1.1 对象字⾯量中的作⽤域问题
4.8.1.2 类声明中的作⽤域问题
4.8.1.3 识别“对象⾃⼰(访问)”
4.8.1.4 识别“对象访问(⾃⼰)”
4.8.2 从私有属性到私有成员
4.8.2.1 私有属性与私有字段
4.8.2.2 私有字段与私有变量
4.8.2.3 再论私有成员
4.8.3 “类字段”提案的实现概要
4.8.3.1 语法设计
4.8.3.2 实现框架
4.8.3.3 概要分析
4.8.4 “私有属性”提案的设计与提议
4.8.4.1 语法设计
4.8.4.2 语法与语义的关系
4.8.5 “私有属性”提案的实现
4.8.5.1 核⼼的实现逻辑
4.8.5.2 ⼀个简短的回顾
4.8.5.3 保护属性的实现
4.8.5.4 可⻅性的管理(unscopables)
4.8.5.5 避免侵⼊(thisValue)
4.8.5.6 内部访问(internal)
4.8.5.7 概要分析
第5章 JavaScript的函数式语⾔特性
5.1 概述
5.1.1 从代码⻛格说起
5.1.2 为什么常⻅的语⾔不赞同连续求值
5.1.3 函数式语⾔的渊源
5.2 从运算式语⾔到函数式语⾔
5.2.1 JavaScript 中的⼏种连续运算
5.2.1.1 连续赋值
5.2.1.2 三元表达式的连⽤
5.2.1.3 连续逻辑运算
5.2.1.4 逗号运算符与连续运算
5.2.1.5 解构赋值
5.2.1.6 函数与⽅法的调⽤
5.2.2 如何消灭语句
5.2.2.1 通过表达式消灭分⽀语句
5.2.2.2 通过函数递归消灭循环语句
5.2.2.3 其他可以被消灭的语句
5.2.3 运算式语⾔
5.2.3.1 运算的实质是值运算
5.2.3.2 运算式语⾔的应⽤
5.2.4 重新认识函数
5.2.4.1 函数是对运算式语⾔的补充
5.2.4.2 函数是代码的组织形式
5.2.4.3 当运算符等义于某个函数时
5.2.5 函数式语⾔
5.2.5.1 “函数”===“Lambda”
5.2.5.2 函数是操作数
5.2.5.3 在函数内保存数据
5.2.5.4 函数内的运算对函数外⽆副作⽤
5.2.5.5 函数式的特性集
5.3 JavaScript中的函数
5.3.1 参数
5.3.1.1 可变参数
5.3.1.2 默认参数
5.3.1.3 剩余参数
5.3.1.4 模板参数
5.3.1.5 参数对象
5.3.1.6 ⾮简单参数
5.3.1.7 ⾮惰性求值
5.3.1.8 传值参数
5.3.2 函数
5.3.2.1 ⼀般函数
5.3.2.2 ⽣成器函数
5.3.2.3 类
5.3.2.4 ⽅法
5.3.2.5 箭头函数
5.3.2.6 绑定函数
5.3.2.7 代理函数
5.3.3 函数的数据性质
5.3.3.1 函数是第⼀型
5.3.3.2 数据态的函数
5.3.3.3 类与对象态的函数
5.3.3.4 代理态的函数
5.3.4 函数与逻辑结构
5.3.4.1 递归
5.3.4.2 函数作为构造器的递归
5.3.4.3 块级作⽤域中的函数
5.4 函数的⾏为
5.4.1 构造
5.4.1.1 this引⽤的创建
5.4.1.2 初始化this对象
5.4.2 调⽤
Another random document with
no related content on Scribd:
agraviaros,
sola el alma os alabe, con
amaros.

No tocó Siralvo al fin de la


postrera estancia la flauta, como
á las demás había hecho, pero
rematóla con un terníssimo
suspiro, y Alfeo y Finea, que con
mucho gusto le habían
escuchado, dexando la fuente se
llegaron á él, saludándole con
muy corteses palabras. ¿Qué
caso, dixo Siralvo, te trae, Finea,
por esta parte tan á deshora?
Buscarte, Siralvo, dixo la
graciosa serrana. Aquí me
hallarás muy á tu voluntad, dixo
Siralvo, y levantándose del
suelo, echando al hombro el
zurrón, todos tres se fueron
llegando á la fresca fuente, y allí
sentados, preguntó quién era el
pastor que con ella venía. No dió
lugar Finea á que Alfeo
respondiesse; mas ella lo hizo de
arte que Siralvo, muy contento
de su venida y deseoso de saber
su suerte, se le ofreció en lazo
estrecho de amistad, á que Alfeo
bastantemente correspondió en
voluntad y razones. No se
contentó Finea con esto, pero
pidió á Siralvo que diesse orden
en acomodar á Alfeo. Aquí
estaban, dixo Siralvo, mil ovejas
del gran rabadán Paciolo, que las
guardaba Liardo, y ahora está con
Sileno; este rebaño tiene cuatro
zagales diligentes, cabaña nueva,
instrumentos muy cumplidos,
dehesa propia en que se
apacienta y abrevaderos y
corrales para él solo; estaba á mi
cargo buscar un mayoral que le
gobierne, y si Alfeo le quiere
tomar al suyo, en cuanto yo le
pudiere descuidar lo haré, con las
mismas veras que lo ofrezco.
Finea y Alfeo acetaron con
grande agradecimiento la
voluntad y obra de Siralvo; y
contentíssima desto, le pareció á
la serrana irse á su cabaña, y á
los dos pastores hacerle
compañía, y sin valer excusas,
que ella dió para desviarles aquel
cuidado, los tres comenzaron á
caminar por la espessura, y la
pastora á contar á Siralvo lo que
en el valle de Elisa había
passado, cuando Filardo,
competidor de Pradelio, hacia ella
venía cantando, con una voz llena
de melodía y tristeza, y por no ser
causa de que lo dexasse,
apartándose entre los árboles con
gran silencio, oyeron esta canción
que no con menos espacio iba
diciendo:

FILARDO
No por sospiros que deis,
corazón, descanso espero;
pero dé el alma el postrero,
y ella y Vos descansaréis.
Estando la vida tal
de su tiempo bueno ausente,
que ser vida es acidente,
y cansarme es natural,
corazón, no alcanzaréis
con sospiros lo que quiero;
pero dé el alma el postrero,
y ella y Vos descansaréis.
El rato que sospiráis,
descansárades siquiera,
cuando la vida no fuera
el fuego en que os abrasáis;
dad sospiros, y veréis
que el mejor es más ligero;
pero dé el alma el postrero,
y ella y Vos descansaréis.
Un solo rayo os abrasa,
mas sus lugares son dos:
las llamas tocan en vos,
y en el alma está la brasa;
con sospiros la encendéis,
y el sospiro verdadero
es dar al alma el postrero,
y ella y Vos descansaréis.
No quiero yo, corazón,
quitaros el sospirar,
que sospiro podéis dar
que os valga por galardón;
si con sospiros movéis
la voluntad por quien muero,
sin dar el alma el postrero,
ella y Vos descansaréis.
No estaba muy confiado de
merecer Filardo tanto bien (como
sus versos decían), se
ablandasse por tiempo la causa
de su dolor, y assí el presente fué
tanto, que, sin poder animarse,
con los postreros acentos cayó en
tierra. Siralvo con gran lástima y
amor se le presentó, diciendo:
¿Qué es esto, Filardo mío, qué
congoxa te mueve á tanto
extremo? ¿Qué ha de ser, dixo
Filardo, sino lo que siempre
suele? ¿ó qué fatiga me puede
descomponer, sino la que Filena
me quisiere dar? ¿ó qué rato
podré vivir sin que ella guste de
atormentarme? ¡Maldita sea la
hora en que nací para amalla, y
maldito sea el hombre que nace
para amar! Puesto estoy, Siralvo,
en el profundo de las miserias de
Amor, sin haber cosa de donde
espere consuelo. Levántate
amigo, dixo Siralvo, que aunque
yo creo que tendrás razón, de tu
propio humor eres congojoso;
vente con nosotros, y dime tu
pena, quizá no será tanta la
causa como te parece. Como tú
quizá, dijo Filardo, estás
favorecido, parécete poco el mal
ajeno. En cada jornada, dixo
Siralvo, hay su legua de mal
camino; pero menester es
resistencia, si ha de haber
perseverancia. Si Filena se
descuidó en algo contigo, ya
pensarás que el mundo es
acabado: no la fatigues con
quejas continuas, aunque la razón
te sobre; no la pidas celos,
aunque te arranquen el corazón,
que la mujer apretada siempre
desliza por donde peor nos está.
Haz lo mismo que Pradelio, que
donde quiera que la ve llega
risueño y regocijado, y pone en
fiesta á cuantos allí están,
inventando juegos y danzas, y
cualquier cosa que la pastorcilla
haga alaba por buena. Créeme,
que la primera fuerza que con
mujeres se ha de probar es bien
parecer, y un hombre marchito y
trashojado viene á ofendellas,
hasta ser demonio en su
presencia. Basta pastor, dijo
Filardo, hablas como sano en fin,
y tus medicinas no son para el
doliente: haga Filena conmigo lo
que hace con Pradelio, verás cuál
ando yo y cuál anda él. Mas, si
desde que entró en el valle de
Elisa hasta la salida, jamás dél
partió los ojos ni los volvió á
mirarme: ¿qué quieres que
sienta? ¿ó qué sintieras tú si
como yo la amaras? Doliérame,
dixo Siralvo, mas á las veces una
sinrazón notable suele
desapassionar al más
enamorado. Y aun indignar, dixo
Filardo mas pássase essa ira en
un momento y queda el triste que
ama hecho un centro de dolores,
donde creo que nunca la muerte
viene por fuerza de los males,
sino por contradición del que la
teme, que á mí que la deseo, tan
necessitado de su favor,
niégamele; y niéguemele si
quiere, que si nací para esto, yo
no lo puedo excusar. ¿Qué ves,
ingrata, en Pradelio más que en
mí, sino lo que tú le das? ¿ó qué
en mí menos que en él, sino lo
que tú me quitas? Ayer pagada de
mis servicios, y hoy de mi muerte,
buen galardón lleva el que desea
servir; tómate cuenta de lo que
haces, y volverás por tí misma, si
no olvidas del todo, á lo que te
obliga tu propio valor. Passó
Filardo, y dixo Finea: Assí veas á
Filena tan de tu parte como
deseas, que no te aflijas; mas
saca la lira y canta un poco, y
entretendrás tu dolor y nuestro
camino. Gracia tienes, serrana,
dixo el pastor: ¿cantar me
mandas de gusto, viéndome
morir? Pues haz como el cisne,
dixo Finea, y lo que has de
lamentar sea cantando, que no
enternecerán menos tus
querellas. Por castigarte de lo que
pides, dixo Filardo, quiero cantar,
serrana; y sacando la lira, con
tres mil sospiros, en son triste,
pero artificioso y suave, comenzó
á decir Filardo:

FILARDO
Si á tanto llega el dolor
de sospechas y recelos,
no le llame nadie celos,
sino rabia del amor.
Dolor, que siempre está
verde,
aunque vos más os sequéis,
y á donde quiera que estéis,
veis presente á quien os
muerde;
mal que para su rigor
se conjuran hoy los cielos,
no le llame nadie celos,
sino rabia del amor.
Pues derriba una sospecha
la vida más poderosa,
y una presunción celosa
deja una gloria deshecha,
y á fuerza de su furor
se aborrecen los consuelos,
no la llame nadie celos,
sino rabia del amor.
No valen fuerzas ni mañas
contra mal tan inhumano,
porque el hambriento gusano
que se ceba en las entrañas,
allí vierte á su sabor
sus centellas y sus hielos;
no le llame nadie celos,
sino rabia del amor.
Si deste diente tocado
debe un corazón rabiar,
nadie lo podrá juzgar
sino aquél que lo ha probado;
yo que en medio del favor
gusté tan enormes duelos,
no puedo llamarlos celos,
sino rabia del amor.

Quien tal pide que tal pague, dixo


Filardo al fin de su canción. Veis
aquí, pastora, cuál estoy, y cuál
está la lira, y cuál el canto. Assí
estuviera tu corazón, dixo Finea,
que, como cantas sin gusto, no te
satisfaces á tí como á nosotros.
Pues assí te ha parecido el
pastor, págamelo en otro tanto, y
di alguna canción de las que
suele decir Filena, que, aunque
poco ganoso de hacerlo ni
excusarlo, quiero ver si hay en el
mundo orejas que se muevan á
mi ruego. Las mías, dixo Finea,
prestas estarán á oirte y á
obedecerte: toca la lira, que á tu
son quiero cantar. No andaba tras
esso, dixo Filardo; mas hágase lo
que quieres. Tocando el
instrumento, la serrana le
acompañó diciendo assí:

FINEA
Del Amor y sus favores,
lo mejor
es no tratar con Amor.
Esme el cielo buen testigo,
del cual voy tras mi deseo,
do con mil muertes peleo,
teniendo un solo enemigo,
no durarán lo que digo,
y aún peor
los que tratan con Amor.
Verán su fé y su razón
escrita en letras de fuego,
y verán que su sossiego
es campo de altercación;
verán que su galardón,
el mejor
no tiene señal de Amor.

Juntamente llegó Finea al fin de


su canción y á la puerta de su
cabaña, donde halló á Dinarda y á
Silvia que la esperaba, y allí
despidiéndose los pastores con
gran cortesía. Filardo, á ruego de
Silvia, se quedó con ellas, y Alfeo
y Siralvo tornaron por su
camino. No querría, dixo Siralvo,
cansarte con preguntas ni
congojarte con mi deseo; pero no
dexaré de decirte que holgara en
extremo de saber quién y de
dónde eres. Las alabanzas que
de ti me dió la serrana, tu persona
las confirma todas, y lo que tengo
visto, bien basta para procurar tu
amistad; pero ya sabes que entre
amigos no es justo haber nada
encubierto: préndote mi fe, que no
te arrepientas jamás de lo que
conmigo comunicares. Esso creo
yo muy bien, dixo Alfeo, pero
sabe que es mucho lo que hay
que saber de mí, y si más
hubiera, más supieras, que tu
bondad, Siralvo, á esto y más
me obliga. Tú sabrás que este
hábito no es mío: pluguiera al
cielo que desde mi nacimiento lo
fuera, excusara las mayores
desventuras que jamás han
passado por hombre de mi suerte.
Caballero soy, natural desta
vecina Mantua, que por toda ella
se ve el blasón de mi verdadero
apellido, y más sabrás que pago
en breves días con las setenas lo
que muchos gocé de libertad y
contento. No renuevas mi mal con
tu pregunta, que siempre se está
presente, ni me aflige tu voluntad,
que bien enseñado estoy á no
seguir la mía; mas porque temo
cansarte con mi cuento largo y
pesado, te suplico cuando lo
estés me avises, que llevándolo
en dos veces, quizá te bastará la
fuerza y á mí el ánimo. Ser tú
quien dices, dixo Siralvo, bien
claro lo muestras, y conocer yo la
merced que me haces, no lo
dudes; y menos que es imposible
cansarme de oir tus casos; mas
yo sé, Alfeo, que el día ha sido
hoy largo para tí, y será razón dar
á la noche su parte hasta el alba,
y entonces, habiendo tú
reposado, podrás cumplir la
promessa y oirme un rato, quizá
seré ocasión de alivio á tu mal.
No espero menos de ti, dixo
Alfeo; y en estas y en otras
agradables pláticas llegaron á las
cabañas de Mendino, donde Alfeo
fué albergado, y Siralvo, sin que
él ni nadie lo sintiesse, tomó el
camino de las huertas del
rabadán Vandalio, donde Filida
estaba, y á esta hora Siralvo con
seguridad podía buscarla para
oirla ó verla desde aparte. Poco
tardó en llegar el enamorado
pastor, pero rato había que la
hermosíssima Filida reposaba.
Triste y despechado se halló
Siralvo por su tardanza, y
sentándose al pie de un olmo,
junto al ancho y rico albergo, se
dejó transportar en un profundo
pensamiento, de manera que, sin
sentirlo él, fué sentido,
recordando con sus sospiros á
Florela, hermosa y discreta
pastora de la casa de Vandalio, y
tan amada de Filida, que en su
mismo aposento se albergaba;
bien conocía los sospiros de
Siralvo, y muchas veces deseó
que Filida los sintiesse y
admitiesse la voluntad del pastor,
allí donde infinitas y de grande
estima eran despreciadas. Dexó
el lecho Florela, y mal vestida
salió donde halló á Siralvo, que
vuelto en sí se levantaba para
irse. ¿Qué venida es ésta? dixo
Florela. La mía no sé, dixo
Siralvo; pero la tuya mi remedio
será, porque te certifico que
estaba á punto de acabarme.
Consuélame, pues siempre lo
haces, y no hay quien pueda
hacerlo sino tú. Deja el pesar,
dixo Florela, que si esta noche
vinieras á la hora que sueles,
pudieras ver y oir á Filida en el
lugar que estamos. Buena
manera, dixo Siralvo, es essa de
consuelo. ¡Maldita sea mi
tardanza, que soy el más
desazonado de los hombres! Bien
le bastaría al que ama una
pequeña sepultura donde
passasse el tiempo que resta de
sus contentos, para que cuidados
ajenos no le estorbassen los
suyos. Vinieron á mi cabaña
Filardo y Finea, y otro pastor
forastero, y cuando dellos me
pude librar, hallo la pérdida que
ves. Descongójate, dixo la
pastora, que por lo menos sabrá
Filida tu sentimiento, y vente
conmigo, que tengo grandes
cosas que contarte, y este lugar
no me parece muy seguro, que
poco ha andaban por aquí
pastores de Vandalio buscando
unos mastines. Vamos donde
quisieres, dixo Siralvo, y
siguiendo á Florela entraron por
un camino estrecho que dividía
dos huertos, y entre las ramas
que de ellos salían, que casi el
camino cegaban, los dos se
sentaron, y la pastora comenzó
diciendo: ¿Qué tanto amas á
Filida, Siralvo? Á esse grado,
dixo el pastor, no llegó mi propio
sentimiento. ¿De manera, dixo la
pastora, que te parece mucho lo
que la amas? Sí, mientras no la
veo, dixo Siralvo; que llegado á
miralla no me parece possible
amarla lo que se le debe. ¿Pues
quién te ataja la voluntad, dixo
Florela, para no pagar essa
obligación? Un corazón de
hombre, dixo Siralvo, con que la
amo, impossibilitado á pagar
deuda tan superior. Mucho me
agrada tu fe, dixo Florela, y ten
cierto que toda la debes como la
pagas, que aunque te parezca
que Filida guarda su punto más
que las otras mujeres, pues es la
mejor de todas, no hay exceso en
esto, y al fin sólo has bastado en
lo que nadie ha sido parte: no se
desgusta de que la veas, y
allánase á leer tus versos y oir tus
querellas cuando tú se las das, á
yo por ti. Ves aquí una carta de
Carpino que le envió con Silvia, y
no la quiso leer ni recebir, y yo por
mostrártela se la tomé á Silvia. No
me encarezcas, dixo Siralvo, mi
buena fortuna, que para conocer
el bien que tengo no es menester
que le pierda: yo lo sé en más
cosas de las que tú me dices.
Pésame que hayas tomado esse
papel, que no pensará Carpino
que le quieres para tu gusto, sino
para el de Filida. En esta
respuesta lo verá, dixo Florela, y
sacando la carta, fácilmente á la
luna vió Siralvo que decía:

CARTA
Vive Amor, dulce señora,
y vivirá en mi cuidado,
al natural retratado,
del que en nuestros ojos mora,
que holgara de callar
si pudiera, mas no puedo;
con Amor sin culpa quedo,
con vos lo querría quedar.
Vuestra hermosura vi,
y luego mi muerte en ella,
que cualquiera parte della
tocó al arma contra mí;
ojos, frente, manos, boca,
que al ser humano excedéis,
tate, dije, no os juntéis
tantos á empresa tan poca.
Prendiéronme juntamente,
sin mostrar desto desdén:
vuestra voluntad también
se quiso hallar presente;
viendo que merecimiento
faltaba de parte mía,
puse yo lo que tenía,
que fué mi consentimiento.
Á la sazón que el Amor
me prendió desta manera,
la montaña y la ribera
sin hoja estaba y sin flor,
y cuando os llegué á mirar,
mostróme Amor de su mano
el más felice verano
que el cielo puede mostrar.
Mas apenas fué llegada
vuestra ausencia fiera y cruda,
cuando mi verano muda
su fuerza en sazón helada;
y assí será hasta ver
la luz dessos claros ojos,
que entonces estos abrojos
flores tornarán á ser.
Pues, esmeraldas divinas,
lumbre generosa y alma,
desterrad ya de mi alma
tan rigurosas espinas,
que aunque ella siempre os
adora,
y veros en sí merece,
sabed que se compadece
deste cuerpo donde mora.
Llevó mis passos ventura,
pensándome despeñar,
y heme venido á hallar
en minas de hermosura;
tan soberana riqueza,
tesoros tan extremados,
no permitáis que, hallados,
se me tornen en pobreza.
Por ventura á mis razones,
aunque ciertas desmandadas,
vuestras orejas, usadas
á más agradables sones,
tomarán alteración,
y la púrpura y la nieve
que en nuestras mejillas
llueve,
crecerán por mi ocasión.
Señora, no lo hagáis,
reid y burlad de mí;
haced cuenta que nací
para que vos os riáis;
mas no, pastora, no sea
tomada en burla la fe
que en vuestra beldad juré
y en mi alma se recrea.
No hay en mí cosa valida
que os ponga en obligación
de estimar esta afición
que estimo en más que la
vida:
loaros es ofenderos;
serviros, ¿quién llega allí?
y si os quiero más que á mí,
ya voy pagado en quereros.
Ninguna cosa he hallado
que merecer pueda dar
de desearos mirar,
si no es haberos mirado;
porque aquel conocimiento
de vuestro sumo valor,
es la dignidad mayor
que cabe en merecimiento.
Ya veis que fuistes nacida
por milagro de natura;
sedlo también de ventura,
y hacelde en mi humilde vida,
y vénganse luego á mí
los más bien afortunados;
volverán desconsolados,
muertos de envidia de mí.
¿Qué nos enseña en la
tierra
el cielo por sobrescrito
de aquel poder que, infinito,
todo lo abarca y encierra?
¿qué pinta imaginación?
¿qué descubre ingenio ó arte
que llegue á la menor parte
de vuestra gran perfeción?
Juntáronse tierra y cielo
á poneros sus señales;
con las dotes celestiales
y las mejores del suelo
hizoos tan perfeta Dios,
que lo que es menos espanta,
y á mí dé ventura tanta,
que venga á morir por vos.
Yo sé que, si lo que os
quiero
acertara á encarecer,
os pudiera enternecer
aunque fuérades de acero;
mas de lo poco que muestro
podéis ver mi mucho amor,
y que con ira ó favor
me firmaré: Siempre vuestro.

Enamorado está Carpino dixo


Siralvo al fin de la carta, y, para
decir verdad, no me hace muy
buen gusto. Siempre vosotros,
dixo Filena, querríades que la que
amáis no pareciesse bien á nadie.
Mal recado tendría yo, dixo
Siralvo, si esso quisiesse; que á
la belleza de Filida los cielos se
enamoran, los hombres se
admiran y pienso que las fieras se
amansan. ¡Oh, Florela, qué
excesivas ventajas puso Dios en
ella sobre cuantas viven! Pues la
condición, Siralvo, dixo Florela, yo
te prometo que no es menos
buena que su hermosura; tiene
una falta, que no es discreta, á lo
menos como las otras mujeres,
porque su entendimiento es de
varón muy maduro y muy
probado, aquella profundidad en
las virtudes y en las artes, aquella
constancia de pecho á las dos
caras de fortuna. ¿Y la gracia,
pastora? dixo Siralvo. No me
hables en esso, dixo Florela, que
con ser yo mujer, me veo con ella
mil veces alcanzada de amores;
su limpieza y aseo, liberalidad y
trato, ¿dónde se hallará? Amala,
Siralvo, y ámela el mundo, que no
hay en él cosa tan puesta en
razón. Mas dime, ¿qué papel era
el que le emviastes anoche, que
no me acordé de pedirsele?
Florela, dixo Siralvo, era un
retrato en versos que yo le hice.
Dímele, pastor, dixo Florela, que
aun podría yo pagártele en otro
de pintura suyo, que hizo el
lusitano Coelio, padre de Belisa:
mira si será extremado. También
lo será la paga, dixo Siralvo, y
por que no la excuses, oye el que
yo hice, que el uno y el otro sé yo
que cuando á Filida no se
parezca, menos habrá quién se
parezca á ellos, pues de tan rico
dechado no saldrá labor que en
otra pueda hallarse.

SIRALVO
Ya que me faltan para
dibuxaros
pincel divino y mano
soberana,
y no la presunción de
retrataros,
con mal cortada péñola
liviana,
de mis entrañas quiero
trasladaros,
donde os pintó el Amor, con
tanta gana,
que, por no ser á su primor
ingrato,
se quedó por alcaide del
retrato.
Ricas madexas de inmortal
tesoro,
cadenas vivas, cuyos lazos
bellos
no se preciaron de imitar al
oro,
porque apenas el oro es
sombra dellos:
luz y alegría que en tinieblas
lloro,
ébano fino, tales sois,
cabellos,
que aunque mil muertes
muera quien os mira,
dichosa el alma que por vos
sospira.
Campo agradable, cielo
milagroso,
hermosa frente, en cuyo
señorío
goza la vista un Mayo
deleitoso
y el corazón un riguroso Estío;
nieve, blanco jazmín, marfil
precioso,
fuego, espina cruel, espejo
mío,
pues la beldad en vos de sí se
admira,
dichosa el alma que por vos
sospira.
Ojos, de aquella eterna luz
maestra
de donde mana estotra luz
visible,
que la noche y el día, el cielo
muestra,
de aquélla fuistes hechos, y es
possible
ser verde el rayo de la lumbre
vuestra:
para hacer vuestro poder
sufrible,
ora miréis con mansedumbre
ó ira,
dichosa el alma que por vos
sospira.
Si distinto elemento el
primor fuera

You might also like