nodeJS面试问题
Thu Feb 04 2021
1 min read
Beijing;
# 粗略概括一下nodeJS的组成结构
c++ -> Libuv -> V8 -> JS
# nodejs 模块类型,有几种,他们之间有什么不同?
- 核心模块,在内建模块上层封装的js层接口。
- 内建模块,node内部原生的c++模块实现,这些模块调用了 Libuv 接口。
- 文件模块, 纯JS模块。
核心模块在启动进程时, 会被引入到内存中,以提高之后的调用效率。
# 为什么require可以不用声明而直接引用?
在Node中,每个模块都会被一个立即执行函数(IIFE)包裹着,在Node引入执行它们时,会传入一些参数
(function(exports, require, module, __filename, __dirname) {
})()
所以,在引入一个文件模块
时,会使用一个IIFE初始化这个模块的代码,通过它来带入一些常用的而不用声明的变量。
这样做还有一个用处是作用域隔离,不会产生命名冲突之类的问题。注意,在global中注入这些变量不能完成相同的
事情,因为以上每个属性对其调用的模块都有特殊逻辑,定义在global中属于常量,
# module.export换成exports可以吗, 他们之间有什么不同?
var module = { exports: {} };
var exports = module.exports;