当前位置:嗨网首页>书籍在线阅读

14-小结

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

2.7 小结

本章我们讲解了一些在其他广泛使用的程序语言中没有的概念,尽管这些概念并不是JavaScript 特有的。这些话题的知识对于编写单页应用很重要,没有这些知识的话,在构建应用时你会觉得很迷茫。

理解变量作用域以及变量和函数提升,是揭去JavaScript变量神秘面纱的基础。理解执行环境对象,对于理解“作用域和提升是如何工作的”来说至关重要。

知道在JavaScript中如何使用原型创建对象,使得用原生的JavaScript编写可重用的代码成为可能。不理解基于原型的对象,工程师们经常会回过头来使用库来编写可重用的代码,依靠库提供的基于类的模型,实际上是在基于原型的模型上封装的。如果在学习了基于原型的方法后,仍然喜欢使用基于类的系统,你依然可以在一些简单的使用案例中利用基于原型的模型。对于构建单页应用,我们将使用基于原型的模型,这有两个原因:我们相信对于我们的使用案例来说更加简单,并且这是 JavaScript 的方式,我们是用JavaScript在编码。

编写自执行匿名函数,会控制变量作用域,帮助你防止无意间污染了全局名字空间,以及帮助你编写不会和其他库产生冲突的库和代码库(codebase)。

理解模块模式和使用私有变量,允许你精心制作对象的公开API,隐藏所有杂乱的、其他对象不需要访问的内部方法和变量。这能保持API的美观和简洁,哪些方法需要消化学习,哪些是API的内部辅助方法,一目了然。

最后,我们在一个最难的JavaScript概念上花费了很多时间:闭包。如果你仍然没有完全理解闭包,希望在这本书中有足够的实践机会来巩固你的理解。

在心中有了这些概念后,我们继续来学习下一章的内容,开始构建具有产品级质量的单页应用。

注 释

[1].好奇号(Curiosity)是一辆美国宇航局火星科学实验室辖下的火星探测器,主要用于探索火星的盖尔撞击坑,为美国宇航局火星科学实验室计划的一部份。好奇号的任务包括:探测火星气候及地质,探测盖尔撞击坑内的环境是否曾经能够支持生命,探测火星上的水,及研究日后人类探索的可行性。更多信息请参见http://zh.wikipedia.org/wiki/好奇号。——译者注

[2].单页Web 应用,作者在整本书中都使用缩略词SPA。考虑到目前SPA 并未被业界大规模接受,尤其文中读者可能会觉得陌生,在翻译过程中考虑到表述的简洁性和大家的习惯叫法,只使用“单页应用”一词,不过译者还是希望本书所有的读者能记住SPA这个缩略词。——译者注

[3]. 如果你一边在阅读本章的内容,一边在吃掉在胸口的薯片,那么你就是个懒散的人。

[4]. pplix (VistaSource) Anywhere Office。

[5].你会说“同源策略”?如果你曾经使用Flash 或者Java开发过东西,你对此挑战应该是再熟悉不过了。

[6]. 请查看http://iq12.com/old_blog/as3-benchmark/和http://jacksondunstan.com/articles/1636,一些同Flash ActionScript3的比较。

[7]. 本书的另外一个名字可以是《使用最佳方法构建单页应用》,但这显得有点儿啰嗦。

[8]. 请查看http://www.javascriptkit.com/dhtmltutors/domready.shtml,感受一下痛苦。

[9]. 但没有完全消除:如果服务端和客户端的数据交换格式更改了,但是很多用户在他们的浏览器中已经加载了先前版本软件的数据,这会发生什么状况?可以预先提供一些方案。

[10]. 自执行匿名函数(self-executing anonymous function),现在通常叫做立即调用函数表达式(immediately-invoked function expression),缩写为IIFE。更多信息请参考http://en.wikipedia.org /wiki/Immediately-invoked_function_expression。——译者注

[11]. 表述有误。JavaScript中的函数作用域是通过词法来划分的,意即在定义函数的时候作用域链就固定了。图中,second_function的定义不在first_function内,因此它无法访问first_function中的局部变量,尽管它是在first_function中被调用的。请忽略此段和第4小点第一段的内容。——译者注

[12]. 这里的实际输出是“stayin alive!”。Java Script中通过var声明的变量是不能通过delete操作符来删除的。所以,这段示例代码和代码上方的相关论述还请读者自己进行思考(作者写作时是在浏览器的控制台中测试的,其实作者只注意到了最后的undefined,没注意到undefined之前的正确输出值)。——译者注