node学习部分小结
文章目录
node是什么?
- node完整的名字是node.js,顾名思义,以js为后缀名那就多少与javascript有点关系。简单的说,Node.js是运行在服务端的JavaScript。
- 是一个事件驱动I/O服务端JavaScript环境,基于V8引擎执行JS。
node.js模块系统
概要
- node.js提供模块系统目的是让node.js的文件可以相互调用
- 简要的说一个node.js文件就是一个模块(模块和文件是一一对应的)
- 文件不一定就是JavaScript代码,也可以是JSON文件或者C/C++扩展(编译过的)
- 模块可以分为核心模块和文件模块
- 模块间的变量和函数在其他模块无法访问到,每个JS文件代码都独立运行在一个函数中
关键知识点梳理
核心模块和文件模块
- 核心模块与文件模块在来源、标识和导入方式上有所区别:
模块 | 来源 | 标识 | 导入方式(*由标识不同导致*) |
---|---|---|---|
核心模块 | 有node.js引擎提供的模块 | 模块自身的名字为标识 | require(“模块名”) |
文件模块 | 用户自己定义的模块 | 模块所在(绝对/相对)路径为标识 | require(“路径”) |
模块间函数和变量无法访问到的原因
node.js的每一个模块都会包装到一个函数中执行:
function (exports, require, module, __filename, __dirname){
//编写的模块代码
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S9LzAfsh-1635046263763)(D:\Documents\MarkDown Files\imgs\image-20210925170152630.png)]
如上:在test模块中编写代码console.log(arguments.callee +'');
,在main.js中引入并执行得到上图输出结果,得证被引入模块的变量和函数无法被访问到的原因是模块在执行时会被包装到一个函数中,相当于引入了一个函数,变量为局部变量,故而不能被访问到。
function(exports,require,module,__filename
,__dirname
)简要理解
- exports:用来将变量或函数暴露到外部
- require:函数,用来引用外部的模块,引入模块后会返回一个对象,改对象代表引入得那个模块
- module:代表当前模块本身,exports是module的一个属性
__filename
:当前模块的完整路径__dirname
:当前模块所在文件夹路径,(__filename的上一级目录)
exports和module.exports的区别
exports和module.exports都可以将变量暴露到外部,但方法上有所不同:
- exports暴露:方法为:exports.变量名=值;如:exports.num1=10
- module.exports:
- module.exports.变量名=值
- module.exports={变量1=值,变量2=值}
为什么会有这样的差别?
首先需要理解什么是引用变量,然后最关键的一句话是:exports其实是module.exports的一个引用即:
var exports = module.exports;
module.exports={
变量1=值,
变量2=值}
exports.变量名=值;
module.exports.变量名=值
exports 只是一个变量(类似C语言中的指针的概念),在栈中存储。而module.exports则是对象实体,在堆中存在。简单说,好比一个仓库,你要往仓库里放东西,如果你知道仓库在哪直接去放就可以,如果不知道在哪,就可以让exports领着你去仓库。
至于exports为什么不能直接赋予一个对象就显而易见了。
——人家本来放的是去仓库的路线,只是领着你去仓库的,你把东西(对象)交给他就好比你给他说这个就是新仓库的地址(如果可以的话),结果人家就把原来的仓库路线给忘了(因为重新赋了值)。