1. nodeJs常用场景
- 被用于为前端提供数据的后端
- 腾讯视频采用的nodejs作为中间层(搜索引擎的优化、首屏的优化)
- 构建工作流
2. 什么是nodeJs?
- nodeJs是基于chromeV8引擎的javascript运行环境
- nodejs使用了一个事件驱动、非组塞式I/O模型,使其轻量又高效
3. nodejs和js在chrome写有那些不一样?
- nodejs没有浏览器Api,document、window等
- 加了许多nodeJS的API。
- 加了文件等。
- 在chrome写js控制浏览器
- 在nodejs写控制计算机
4. commonJS规范
- script标签的缺点就是脚本变多时,需要手动管理加载顺序
- 不同脚本之间逻辑调用,需要通过全局变量的方式
- 引用模块用require(),导出变量和函数用exports, 例如exports.hello = “world”
- mdoule.exports 会覆盖exports的数据
- 核心:1.隐藏模块内部实现 2. 暴露供外部使用的接口
- commonJS 使用 exports 导出模块, require 导入模块
- 如果是导出整个文件,可以看作文件用moudle.exports
- 模块内的所有代码均为 隐藏代码,包括 全局变量、全局函数,这些全局的内容 均不应该对全局变量造成污染。
- 如果一个模块需要暴露一些API给外部使用,需要通过exports 导出,exports 是一个空对象,你可以为该对象 添加任何需要导出的内容。
- 如果一个模块需要导入其他模块,通过require 实现,require 是一个函数,传入模块的路径即可返回该模块导出的整个内容。
5. node对commonJS的实现
- 为了保证高效的执行,进加载必要的模块。nodejs 执行到require 函数时才会加载并执行。
- 为了隐藏模块中的代码,nodejs 执行模块时,会将模块中的所有放到一个函数中执行,以保证不污染全局变量。
- 为了保证顺利的导出模块内容,nodejs 做了以下处理
- 在模块开始执行前,初始化一个值 module.exports = {}
- module.exports是模块导出
- 为了方便开发者便捷的导出,nodejs 在初始化 完成module.exports后,有声明了一个变量exports = module.exports