node并不是js全集,比如bom,dom…就不是node具备的,而node其实是:ecmascript+moudle的合集
观察上图,会发现其实node所谓的异步,其实事件环也是通过WorkerThreads多线程
来实现
node.js中的队列
nodejs队列与浏览器不同的是浏览器的队列有两种宏任务和微任务,而nodejs,有计时器队列,网络处理队列,node核心工作模块队列,IO队列,检查队列 关闭回调队列
当主栈
代码执行完成,会先执行计时器队列中的任务,然后逐层清空任务队列
,当代码执行完I/O轮询的时候就会去检查一次计时器队列是否有到时间,如果有,则执行清空队列,如果有且发现存在setImmediate则会走下一个队列check,清空setImmediate。如果没有则卡住在轮询这里直到定时器队列重新添加任务,计时器丢列这样的环式过程就是Node事件环
注意
,如果poll队列下面的check队列执行了,就一定会执行setImmediate()
moudle
1、解决协同开发问题
2、避免全局变量,防止重名
3、模块化都是靠闭包
实现的
4、一个模块就是一个文件
5、引用别人的模块require
6、导出模块给别人用moudle.exports
7、事实上node引用模块靠的是文件读取
-将文件内容读取成为一个字符串通过node内置模块(沙箱模式),将读出的字符串执行
常用内置模块:
- 1、fs
fs.accessAync:判断文件是否可以访问的到 - 3、path path.resolve(
__dirname
,"./index.js")
resolve:__dirname
代表当文件夹 path.resolve(__dirname
,"./index.js")
join: path.join(__dirname
,"./index.js") //resolve和join用法基本一致
坑:如果 path.resolve
(d
,"./") //如果使用resolve但是文件路径写了/那么获取路径就是根目录
path.join(__dirname
,"/") //使用join方法就能拼接/
extname:path.extname(“index.js”) //获取文件后缀名
basename:path.basename(“index.min.js”,".js") //第一个参数是文件,第二参数:除此之外都满足条件
…待补充…