Node.js 简介
Node.js 是一个开源和跨平台的JavaScript运行时环境。
Node.js 在浏览器之外运行V8 JavaScript引擎(Google Chrome的内核)。
Node.js 可以构建web服务器。
Node.js 是单线程非阻塞的,这允许Node.js使用单个服务器就可以处理数千个并发连接。
Node.js 可以使用新的ECMAScript标准。
Node.js 安装
1、打开nodejs官网:https://nodejs.org/en/
2、下载安装包,安装
3、验证
node -v //查看nodejs版本 npm -v //查看npm版本
Node.js 历史版本下载地址:https://nodejs.org/dist/
运行 Node.js 脚本
1、Node.js REPL
Node.js REPL ,类似 Window 系统的终端,我们可以在终端中输入命令,并接收系统的响应,提供交互式的nodejs编程环境。
1.1、输入以下命令来启动 Node 的终端:
1.2、接下来就可以在 > 后面输入一些表达式或者语句,然后按下回车,就会执行代码并给出反馈。
1.3、退出REPL
按下两次 ctrl + c 键或者 ctrl + d 就能退出 REPL。
使用REPL可以简单的去调试 Javascript 代码
1.4、运行脚本文件
node 脚本文件
Node.js 事件循环
Node.js 的事件循环阐明了 Node.js 如何做到异步且具有非阻塞的 I/O。
1、调用堆栈
调用堆栈是一个 LIFO 队列(后进先出)。
事件循环不断地检查调用堆栈,以查看是否需要运行任何函数。
const bar = () => console.log('bar') const baz = () => console.log('baz') const foo = () => { console.log('foo') bar() baz() } foo() //foo //bar //baz
const bar = () => console.log('bar') const baz = () => console.log('baz') const foo = () => { console.log('foo') setTimeout(bar, 0) baz() } foo() //foo //baz //bar
消息队列
当调用 setTimeout() 时, Node.js 会启动定时器。 当定时器到期时,则回调函数会被放入 消息队列 中。包括其它的一些异步的操作,网络请求或者一些事件的订阅,得到响应后它们的回调函数也会被放入 消息队列 。
事件循环会赋予调用堆栈优先级,它首先处理在调用堆栈中找到的所有东西,一旦其中没有任何东西,便开始处理消息队列中的东西。
Node.js 事件循环_ES6 作业队列
ECMAScript 2015 引入了 作业队列 的概念, Promise 使用了该队列。 这种方式会尽快地执行异步函数的结果,而不是放在调用堆栈的末尾。
作业队列的优先级高于消息队列。
const bar = () => console.log('bar') const baz = () => console.log('baz') const foo = () => { console.log('foo') setTimeout(bar, 0) new Promise((resolve, reject) => resolve('应该在 baz 之后、bar 之前') ).then(resolve => console.log(resolve)) baz() } foo() //foo //baz //应该在 baz 之后、bar 之前 //bar
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)(下):https://developer.aliyun.com/article/1420285