common js规范 require 模块化 输出
每个文件都是一个模块,都有自己的作用域;因为 在common js规范里 他本身 就是一个函数。
大约 编译出来长这个样子;
(function(exports,require,module,__filename,__dirname){
// do something here
})
参数 的解释
exports 这是module.exports的简写,但是也只能改写 输出模块的属性, 而不能去改变 输出模块的 内存指向;
require 引入模块 ,支持 js,json,node 拓展名,不写依次尝试 ,都不符合直接报错;
除了路径 还可以直接写名字 默认为nodejs的第三方包或者build in 内置模块 如 fs (file system文件系统)
module 加载1次以后就会做缓存,并不会重复缓存了;第一次加载会执行包含的函数
尽量避免 两个模块 互相引用 重复依赖 ,了解他 就是为了避免他
module 这个代表模块本身, 还带有一个exports属性,是对外暴露的API; 输出模块;
__filename 文件名
__dirname 路径名
global对象 等同于js的window对象 不是window 对象;
包含几个 特性;
自带common js;
Buffer ,process,console,
以及timer setImmediate
Buffer
process global对象的自带的属性 ,当前 执行 的 进程
process 很多属性,其中四个属性 :argv , argv0 ,execArgv ,execpath;
argv 是指启动时的所有参数 , 是一个数组;
argv0 是argv的第一个值的引用;
execArgv 是 文件调用执行 输入之前的 参数集合;是个数组;
execpath 是node 调用的路径, 一般是 argv 的第一个值;
process.cwd() 方法 得到 当前 命令 执行的路径;
process 的env 是各种环境配置的集合对象;
setImmediate 定时器 间隔时间为 为等待下一个事件队列 ;(推荐 )
process.nextTick()和setImmediate 性质差不多;但有些情况会导致阻塞异步队列的情形;
setImmediate ,process.nextTick()和setImmediate 三者的执行先后顺序为:
process.nextTick() 最快,setImmediate中等速度, setImmediate 最慢 ;