|
|
|
|
移动端

1.1 “理解”JavaScript语言

《JavaScript忍者秘籍(第2版)》第1章无处不在的JavaScript,本章我们将一览JavaScript的现状,并探讨几种能够运行JavaScript代码的环境。作为JavaScript的“发祥地”,浏览器将是我们的重点关注对象。此外,我们还将讨论一些JavaScript应用开发中的最佳实践。本节为“理解”JavaScript语言。

作者:一心一译前端小组 译来源:人民邮电出版社|2018-03-06 14:21

【新品产上线啦】51CTO播客,随时随地,碎片化学习

第1部分 热身

本书的第1部分将为你奠定JavaScript“忍者”修炼的基础。在第1章中,我们将一览JavaScript的现状,并探讨几种能够运行JavaScript代码的环境。作为JavaScript的“发祥地”,浏览器将是我们的重点关注对象。此外,我们还将讨论一些JavaScript应用开发中的最佳实践。

由于我们对JavaScript的探索限定在浏览器中,因此我们在第2章中介绍了客户端网络应用的生命周期以及JavaScript代码的执行过程与该生命周期的对应关系。

当你读完这部分之后,就可以开始JavaScript“忍者”的修炼了。

第1章 无处不在的JavaScript

本章包括以下内容:

JavaScript核心语言特性

JavaScript引擎核心要素

JavaScript开发中的3个最佳实践

我们先来聊聊Bob。2000年年初,在花了几年时间学习C++桌面应用开发之后,新晋程序员Bob从学校毕业,奔向了软件开发的广阔天地。那个时候,互联网的跨越式发展才刚刚开始。每个公司都想成为下一个亚马逊。有鉴于此,他做的第一件事就是学习网络开发。

最初他用PHP动态生成网页,并在其中穿插JavaScript代码来实现复杂的功能,例如表单验证,甚至是动态的页内计时器。时光如梭,几年之后,智能手机已然成了气候。预见到一个庞大的新兴市场即将形成,Bob决定先行一步,开始学习使用Objective-C和Java来创建运行于iOS和Android上的移动端应用。

几年来,Bob开发了很多成功的应用软件,并且都需要维护和扩展。遗憾的是,日日辗转于不同的编程语言和应用框架之间,可怜的Bob已经筋疲力尽了。

现在我们来谈一下Ann。两年前,Ann在获得软件开发相关的学位后毕业。她的专业方向偏向于网络以及基于云的应用开发。她已经开发出了一些中等规模的网络应用。这些应用基于现代的模型—视图—控制器(Model—View—Controller, MVC)框架,并且还有相应的移动应用供iOS和Android用户使用。她还开发了一款能够同时在Linux、Windows和OS X上运行的桌面应用,甚至着手将其改为完全基于云的无服务器的版本。最重要的是,她所做的所有事情都是通过JavaScript来实现的。

真是一件了不起的事情。Bob花了10年用5种语言才完成的事情,Ann只需要2年以及1种语言就完成了。纵观整个计算机的发展史,还没有哪个特定的知识集合能够如此容易地通行于不同的领域,并发挥作用。

1995年的一项10天内仓促完成的项目,现在却成为了世界上使用最广泛的编程语言之一。JavaScript现在确确实实是无处不在了,这得归功于更强大的JavaScript引擎和一众框架的出现,如Node、Apache Cordova、Ionic和Electron,是它们让这门粗陋的语言冲出了网页的牢笼,飞向了更广阔的空间。此外,如同HTML一样,这门语言本身也正处于期待已久的进化当中,从而被打造成更加适合现代应用开发的语言。

在本书中,我们首先要保证让你了解所有你需要了解的关于JavaScript的内容,这样无论你的情况与Ann还是Bob更为接近,都能够开发各种类型的应用。

你知道吗?

Babel和Traceur是什么?为什么它们对现在的JavaScript开发者至关重要?

在网络应用中,什么才是浏览器的JavaScript API的核心组成部分?

1.1 “理解”JavaScript语言

随着职业生涯的发展,许多有着与Bob和Ann类似经历的JavaScript程序员,都到了在工作中运用构成这门语言大部分的元素的阶段。但实际上,很多时候这些技能的运用都处于相当初级的层次。我们对此做出的猜测是,由于JavaScript(采用类似于C语言的语法)有着与其他得到广泛使用的类C语言(比如C#和Java)相近的皮相,从而给人留下了与这些语言相似的印象。

人们总是觉得他们对C#或者Java的了解,能为他们理解JavaScript的工作原理打下坚实的基础。然而这是一个陷阱。与其他主流语言相比,JavaScript函数式语言的血统更多一些。JavaScript中的一些概念从根本上不同于其他的语言。

这些根本性的差异包括以下内容。

函数是一等公民(一级对象)——在JavaScript中,函数与其他对象共存,并且能够像任何其他对象一样地使用。函数可以通过字面量创建,可以赋值给变量,可以作为函数参数进行传递,甚至可以作为返回值从函数中返回。在第3章中我们将花费大量篇幅解释函数,探索它作为第一类对象在编写代码中的好处。

函数闭包——大部分人对闭包都缺乏理解,然而它却从根本上例证了函数之于JavaScript的重要性。尽管就目前而言,了解当函数主动维护了在函数内使用的外部的变量,则该函数为一个闭包就已经足够。现在还没看到闭包的好处也不要紧,第5章中我们会把它搞得一清二楚。除了闭包以外,在第3章和第4章中我们也会深入探讨函数的方方面面,第5章中还会讨论标识符作用域。

作用域——直到最近,JavaScript都还没有(类似C语言中的)块级作用域下的变量,取而代之则只能依赖函数级别的变量和全局变量。

基于原型的面向对象——不同于其他主流的面向对象语言(例如C#、Java、Ruby)使用基于类的面向对象,JavaScript使用基于原型的面向对象。很多开发者是从基于类的面向对象语言(例如Java)转而开发JavaScript,他们试图像开发Java一样开发JavaScript。然而由于某些原因,他们会因为结果与预期不同而感到出乎意料。这种情况就是我们要深入理解原型的原因,我们要知道基于原型的面向对象如何工作,以及怎样在JavaScript中实现面向对象。

对象、原型、函数和闭包的紧密结合组成了JavaScript。理解这些概念的密切联系能大大提高你的编程能力,为你开发各种类型的应用提供坚固的基础,无论你的应用是开发在网页上、桌面应用上、移动应用上还是服务器端。

除了这些基本概念,JavaScript的一些其他功能也能帮你书写优雅高效的代码。对于经验老道的Bob一样的开发者来说,这些部分特性在其他语言中也出现过,例如Java和C++。我们会特别聚焦于以下特性。

生成器,一种可以基于一次请求生成多次值的函数,在不同请求之间也能挂起执行。

Promise,让我们更好地控制异步代码。

代理,让我们控制对特定对象的访问。

高级数组方法,书写更优雅的数组处理函数。

Map,用于创建字典集合;Set,处理仅包含不重复项目的集合。

正则表达式,简化用代码书写起来很复杂的逻辑。

模块,把代码划分为较小的可以自包含的片段,使项目更易于管理。

深入理解JavaScript的基础知识,以及学习如何最大程度地利用JavaScript的高级特性,能够让你的代码编写水平提升到一个更高的水平。磨炼代码技能、并将这些概念和特性连贯起来也能让你对JavaScript的理解更上一层楼,从而为你编写各种类型的Javscript应用赋予强大的创造力。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Struts 2权威指南:基于WebWork核心的MVC开发

本书所介绍的Struts 2已经完全超出了Struts 1框架原有的高度,Struts 2建立在Struts 1和WebWork两个框架整合的基础之上,因此提供了更多优...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊