Twlig / issuesBlog

MIT License
3 stars 0 forks source link

Node.js模块化 #4

Open Twlig opened 2 years ago

Twlig commented 2 years ago

Node.js简介

Node.js模块化

​ JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器。然而, JavaScript标准定义的 API 是为了构建基于浏览器的应用程序。JavaScript没有模块系统,标准库较少,没有标准接口,缺乏管理系统。CommonJS 规范的提出,弥补了当前 JavaScript 没有标准的缺陷。

在Node.js中,应用由模块组成,采用commonJS模块规范:

Node.js模块分类

自定义模块案例

Node.js模块工作原理

​ 前面提到模块就是一个js文件,实际上模块中的代码都是包装在一个函数中执行。在JS中var变量作用域是函数内,let,const都是块级作用域。在模块中用到的变量都相当于函数内部的变量,外界无法访问。只对于想暴露的变量采用exports主动导出。这个特性更加便于维护工作环境,防止变量相互间污染。

在自定义模块案例中,testArg.js文件添加如下代码,打印封装函数实参的伪数组对象arguments:

可以看到如下信息:

这说明testArg模块确实是封装在函数内执行,并且还有五个参数:

注意:前面提到只有通过exports暴露的属性和方法才能被访问到,但是如果在testArg模块内声明的是全局变量如:globalTest = 10,引用testArg模块后,globalTest 变量也会被访问到,但是和被暴露的变量不同,globalTest是直接使用,而不是采用模块标识调用。 其实也很好理解,在JS中函数内部如果声明了不带var,let,const等关键字的变量则是全局变量,在函数外部也可以访问。因此,我们在自定义模块的时候要避免使用全局变量,会造成变量使用混乱等一系列问题。