浏览器事件环
js的主线程是单线程,在同一时间内只能干一件事
宏任务:定时器,js渲染,UI渲染,I/O
微任务:promise,Object.observe,process.nextTick,MutationObserver
*先执行微任务后执行宏任务;只有js中script的宏任务会先执行
node
nodejs是运行环境
他有什么作用呢?
1.创建web服务器
2.作为中间件
3.工具
node事件环
node也是单线程
node适合I/O密集;不适合CPU密集(压缩,合并,加密,解密)-大量运算的
node中的this是个空对象
console.log(this);//{}为了做模块化
globe常见属性
- Buffer 处理二进制数据
- process.nextTick()表示定义下一个要执行的动作,在下一个轮询的时间点上执行
- 定时器的各种属性
clearInterval();clearTimeout();setInterval();setTimeout();
clearImmediate();setImmediate();
process常见属性
- process.platform当前的系统(平台信息)
- console.log(process.cwd());显示当前目录(是一个函数)
- console.log(process.env);显示当前系统的环境
- console.log(process.argv);返回的是一个数组:[第一个是node运行程序;第二个元素为当前执行的JavaScript文件路径;剩余的为其他命令行参数]
node模块化
common js规范
1.导入模块 require()
2.导出模块 module.exports
模块的分类
1.核心模块(内置模块fs,http等)
2.自定义模块
3.第三方模块
node的各模块
1.fs模块 文件系统模块
fs.readFile()读取异步的文件模块
fs.readSyncFile()读取同步的文件模块
fs.existsSync()判断文件是否存在
2.path模块 处理路径模块
path.resolve();把路径解析成绝对路径
__dianame 文件的当前目录
path.resolve(__dirname,‘a’,’/’)文件返回到根目录
path.join(__dirname,‘a’,’/’) 返回的是文件最后加一个
Basename()基础名
console.log(path.basename(‘a.txt’,’.txt’));输出 //a
extname()扩展名
console.log(path.extname(‘a.txt’));//.txt
dirname()取父目录
console.log(path.dirname(__dirname));
3.vm模块
解析字符代码
vm.runInThisContext(‘console.log(123)’);
此方法用于创建一个独立的沙箱运行空间,code内的代码可以访问外部的global对象,但是不能访问其他变量,而且code内部global与外部共享