Node简介 | 青训营笔记

80 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第 8 天

Node.js是什么

官方对Node.js的定义:

  • Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。
  • Node.js基于V8引擎来执行JavaScript的代码,但是不仅仅只有V8引擎

V8可以嵌入到任何C ++应用程序中,无论是Chrome还是Node.js,事实上都是嵌入了V8引擎来执行JavaScript代码。

在Chrome浏览器中,还需要解析、渲染HTML、CSS等相关渲染引擎,另外还需要提供支持浏览器操作的API、浏览器的事件循环等。

而在Node.js中也需要进行一些额外的操作,比如文件系统读/写、网络IO、加密、压缩解压文件等操作。

Node.js架构

编写的JavaScript代码会经过V8引擎,再通过Node.js的Bindings,将任务放到Libuv的事件循环中 。 libuv(Unicorn Velociraptor—独角伶盗龙)是使用C语言编写的库,libuv提供了事件循环、文件系统读写、网络IO、线程池等等内容

image.png

Node的REPL

REPL是Read-Eval-Print Loop的简称,翻译为“读取-求值-输出”循环,REPL是一个简单的、交互式的编程环境
浏览器的console就可以看成一个REPL。

Node也提供了一个REPL环境,可以在其中演练简单的代码。

image.png

Node常见的全局对象

process对象:process提供了Node进程中相关的信息:
比如Node的运行环境、参数信息等

console对象: 提供了简单的调试控制台,更加详细的可以查看官网文档:nodejs.org/api/console…
定时器函数:

在Node中使用定时器有好几种方式:

  1. setTimeout(callback, delay[, ...args]):callback在delay毫秒后执行一次;
  2. setInterval(callback, delay[, ...args]):callback每delay毫秒重复执行一次;
  3. setImmediate(callback[, ...args]):callbackI / O事件后的回调的“立即”执行;
  4. process.nextTick(callback[, ...args]):添加到下一次tick队列中

image.png

特殊的全局对象

这些全局对象实际上是模块中的变量,只是每个模块都有,看来像是全局变量;
在命令行交互中是不可以使用的;
包括:__dirname、__filename、exports、module、require()
__dirname:获取当前文件所在的路径:
注意:不包括后面的文件名
__filename:获取当前文件所在的路径和文件名称:
注意:包括后面的文件名称

global对象

global是一个全局对象,事实上前端我们提到的process、console、setTimeout等都有被放到global中:
我们之前讲过:在新的标准中还有一个globalThis,也是指向全局对象的;
类似于浏览器中的window;

image.png

global和window的区别

在浏览器中,全局变量都是在window上的,比如有document、setInterval、setTimeout、alert、console等。

在Node中,也有一个global属性,并且看起来它里面有很多其他对象。但是在浏览器中执行的JavaScript代码,如果在顶级范围内通过var定义的一个属性,默认会被添加到window对象上,但是在node中,通过var定义一个变量,它只是在当前模块中有一个变量,不会放到全局中。