程序员想什么之:模块化 2

叫它js的一种编程语言

JavaScript诞生于1995年,刚开始的用途非常简单,网景公司希望通过它来解决一个问题:在前端页面验证用户的一些输入,而不是将数据发送到后台服务器验证,因为当时是拨号上网,如果频繁的跟服务器交换数据,无疑在挑战用户的忍耐力。

后来网页程序越来越复杂,不得不使用模块化编程,为什么程序复杂之后就需要模块了呢?

首先,复杂之后就需要管理,不然后期无法维护,软件设计的首要任务就是管理复杂度。

其次,复杂的事情往往需要很多人一起完成,你写的代码我可以复用,或者我实现的功能完全在你的实现之上。

一个JavaScript的运行环境

JavaScript模块化编程正式诞生的标志是Node.js项目,由美国程序员Ryan Dahl于2009年创造,目的是将JavaScript用于服务端编程。

Node.js中文官网是这样描述的:

Node.js是一个基于Chrome V8引擎的JavaScript运行环境,Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。

Node.js并不是一种新的语言,而是JavaScript语言的运行环境,它并没有新增什么语法,而是基于JavaScript函数式编程的特点,利用闭包实现了模块化。

详细点说就是,Node.js在加载js文件时(比如test.js),会将代码包装一下,这样全局变量就变成函数内的局部变量。我们就可以使用module.exports导出模块,供其他模块使用了。module.exports实现的原理是,Node.js在加载js文件前准备了一个名为module的变量,并将其传入了加载函数。

往往从导入导出开始

在项目中,不管是开始一个新项目还是中途加入项目,为了分工协作,都要把自己的模块导出给别人用或去看别人模块的导出部分代码。

JavaScript之前是不支持「类」的,先说一下C++的类导出。以Windows下C++桌面程序开发为例,我们往往会在DLL工程中看到这样的导出代码:

extern "c" XXXAPI int _stdcall fun();

extern是C/C++语言中表明函数和全局变量作用范围的关键字。该关键字告诉编译器,其声明的函数和变量可以在本模块或其他模块中使用。通常,在模块的头文件中对本模块提供给其他模块引用的函数和全局变量以关键字extern声明。例如,你写了一个DLL,在导出接口中可以声明extern "C"修饰的函数。与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。

extern "C"指令中的C,表示的一种编译和连接规约,而不是一种语言。"C"表示符合C语言的编译和连接规约的任何语言。所以,extern "C"的真实目的是实现类C和C++的混合编程。

如今,JavaScript已经成为一门功能全面的编程语言,能够处理复杂的计算和交互,拥有了闭包、匿名函数,甚至元编程等特性。ECMAScript标准第六版开始支持类和模块,Node.js按照CommonJS规范定义和使用模块,模块与文件一一对应。

最后,引用下面这段话结尾:

在计算机时代的早期,程序员基于语句思考编程问题。到了20世纪七八十年代,程序员开始基于子程序去思考编程。进入21世纪,程序员以类为基础思考编程问题。成为高效程序员的一个关键就在于,当你开发程序任一部分的代码时,都能安全地忽视程序中尽可能多的其余部分。

连接开发者,连接迭代成长者

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181105G0AZTO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券