简介
-
基于 Chrome 的V8 JS 解析引擎之上,解放了Javascript的编程能力,为 Javascript 提供了 后端编程的能力,例如文件操作,http服务
-
所以说,Node.js 是 一个让javascript进行后端编程的一个运行平台;符合了一切ECMAScript规范的后台语言
V8引擎是一个JavaScript引擎实现,最初由一些语言方面专家设计,后被谷歌收购,随后谷歌对其进行了开源。V8使用C++开发,js在v8引擎下运行媲美二进制的速度
-
版本
LTS 长期稳定版
Current 最新特征版
node -v 查看版本号//没有bom和dom console.log(window) //window is not defined console.log(document)//window is not defined
-
优点
- 异步非阻塞I/O(I/O线程池)
- 事件循环机制
- 适用于I/O密集型应用
- 单线程
- 跨平台
-
缺点
- 回调函数嵌套太多太深(回调地狱)
- 单线程,处理不好CPU密集型任务
-
应用场景
- Web服务API
- 服务端渲染页面,提升速度
- 后端的web服务,例如跨域,服务端请求
-
Content_Type
服务器把每次响应的数据是什么内容都正确告诉客户端;
不同的资源对应的content-type不一样
文本类型数据,添加编码,防止中文乱码
全局对象global
全局对象,作用和网页中的window类型,
全局中创建的变量都作为global的属性保存;
全局中创建的函数都作为global的方法保存;
//当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码:
/伪代码/
function (exports,require,module,_filename,_dirname){
//隐参内部实现
//支持CommonJS模块化
}
模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递5个实参
exports
该对象用来将变量或函数暴露给外部
require
函数,用来引入外部模块
module
代表当前模块本身,exports就是module的属性,既可以使用exports出,也可以使用module.exports导出
_filename
当前模块的绝对路径
_dirname
当前模块所在文件夹的绝对路径
微任务与宏任务
宏任务:主体script ,setTimeout,setInterval
微任务:Promise,process.nextTick