Node.js 由 Baixo dos Panos #2 - Entendendo JavaScript

2025-06-10

Node.js 由 Baixo dos Panos #2 - Entendendo JavaScript

没有任何前椎间盘突出是 C ++、Node.js、JavaScript、历史、手术和集市不过,我们可以通过 Node.js 来实现文件系统和实际实现。例如 Node.js。各个组件的实际情况是分开的。

集市,我们将迎来第二场比赛。 Neste artigo,探索 JavaScript 方面的内容。

JavaScript 由 baixo dos panos 提供

Vamos colocar as coisas em ordem。与 C++ 代码无关,如何真正执行 Node.js,例如 JavaScript 或 Node.js 的新组件,如何执行代码和 JavaScript 功能?

A maioria das pessoas conhece algumas frases prontas e as repetem:

  • JavaScript 是单线程的
  • O Chrome 美国 o V8 como JavaScript 引擎
  • JavaScript 使用回调函数
  • 存在事件循环

有什么深层次的问题吗?

  • 单线程有何意义?
  • JS 引擎有什么用? E o que, de fato, é o V8?
  • 回调函数有什么用?存在 apenas uma fila 吗?
  • 什么是事件循环?科莫功能?控制? Faz 参与 JS 吗?

您可以使用两种语言进行响应,考虑媒体的交流,因为 JavaScript 是一种语言,但我们无法使用这些语言...主要是因为,我们不知道如何使用 JavaScript 来解决问题。真正的功能,最重要的是,因为它是 falam tão mal dele。

引擎 JavaScript

事实上,JavaScript 引擎在 V8 上很受欢迎(um dos melhores softwares já escritos pela humanidade, depois do Git)。这是一个简单的方法,可以使用 Chrome 来导航,或者以 Chromium 为基础 - 可以使用 Chrome 的导航引擎 - 例如 Opera、Brave 和 assim por diante... 不是 entanto,não é o único。 Chakra 的技术、Microsoft 的导航器 Edge、SpiderMonkey 的技术、Netscape 的技术 - 在 Firefox 上执行 - 以及 Rhino、KJS、Nashorn 等其他技术。

没有entanto,比如V8,美国,没有Chrome,没有Node.js,vamos nos manter neles。 Primeiro、vamos dar um panorama geralmostrando uma visão muito simplificada da aparência de um engine JavaScript:

会话图像,nasreferências

其主要组成部分的机制如下:

  • O heap de memória : onde toda a alocação de memória acontece
  • A pilha de chamadas (ou call stack) : onde nosso código é colocado emframes e empilhado para ser executado

Nós teremos um artigo somente para o V8 mais tarde

运行时 JavaScript

一个主要的 API 是用于使用专用引擎的主要 API,可用于前头的所有操作或代码readFile。没有任何问题,因为 Pelo 引擎、DOM 或AJAX(对象)setTimeout的操作技巧都不是这样的。是否有 API vem? Vamos pegar nossa imagem front 和 trazê-la para a dura realidade em que vivemos:documentXMLHttpRequest

图片来自 Session Stack,链接见参考资料

引擎和 JavaScript 引擎一样,是... JavaScript... Existem APIs fornecidas pelo navegador que chamamos de Web APIs - ou também, APIs externas - essas APIs (como DOM, AJAXe setTimeout) são fornecidos pelos desenvolvedores do navegador - nesse caso, para Chrome, é o Google - ou pelo próprio 运行时,como Node(com API 不同)。这是 JavaScript 的主要特点。再次强调 JavaScript 的重要性,请注意 NPM 和其他地方的 JavaScript,主要是同质化的。 Bom...Nem semper foi assim。

那么,ES6 和 Node.js 的前身是我的想法,但我们不认为它是实现 API 的最佳方式,因此我们可以使用 própria 实现该功能,或者...不断地改进特定导航功能(IE 的 lembra?)、特定导航功能或与其他导航功能不同的功能XMLHttpRequest或阿尔古玛setTimeout实现sleep功能; na pior das hipóteses, a API nem ia exitir.这是逐步的、渐进的、有效的、一致的算法和基于 API 开发的算法,以及与其他开发工具一起开发的方法,作为主要的用途和基础。

另外,事件循环和回调的原理也是如此。 Sobre o qual falaremos mais tarde。

调用堆栈

这是一个 JS 语言的单线程语言,它是通用的最终版本。单线程的意义在于调用堆栈,或者说,执行程序的执行。

调用堆栈不是 Javascript 的一部分,而是引擎的一部分,没有 nosso caso,V8。 Mas vou colocar aqui para que possamos ter uma noção de como as coisas devem funcionar em um Fluxo

关于皮哈斯

是一个抽象的技巧,可以为元素提供帮助。 O nome “pilha” deriva da analogia de um conjunto de caixas empilhadas umas sobre as outras, embora seja fácil tirar uma da parte upper da pilha, pegar uma caixo mais abaixo pode exigir queiremos varios outros itens da pilha primeiro.

原则上的方法:

  • : adiciona outro elemento à coleção
  • pop : 删除最近添加的元素,但不能删除它并恢复勇气

Uma coisa importante sobre as pilhas é que a order de como os elementos são viados realmente importa. Nas pilhas,一个后进先出的元素顺序 um acrônimo para Last In First O ut que é bastante autoexplicativo。

不过,请注意,peek最近的操作方法可能会被删除。

请注意以下事项:

  • Eles são uma estrutura de bados na qual cada item da pilha possui um valor, no nosso caso, uma instrução ou chamada
  • Novos itens (chamadas) são adicionados ao topo da pilha
  • 消除拓扑变化的其他方法

代码和 JavaScript

基本信息,不是 JS,而是在当前程序中执行的位置的注册信息。 Se entrarmos em uma função, chamando-a, colocamos essa chamada no topo da pilha。恢复功能后,即可删除问题。 Cada uma dessas chamadas é chamada de Stack Frame

Vamos fazer,como primeiro exemplo,um 程序简单,不同之处在于:

function multiply (x, y) {
    return x * y
}

function printSquare (x) {
    const s = multiply(x, x)
    console.log(s)
}

printSquare(5)
Enter fullscreen mode Exit fullscreen mode

Vamos rodar o nosso exemplo readFilemais tarde, quando tivermos tudo explicado

引擎执行的全过程,主要是调用堆栈。最后,您可以继续以下操作:

我们现在很少:

  • O passo 0 (nãomostrado) é a pilha vazia, o quesignifica o início do nossoprograma
  • 初次使用时,请对初次使用的乐趣感兴趣。 A chamada para printSquare(5), já que todas as outras linhas são apenas declarações.
  • 没有第二个步骤,然后再定义功能printSquare
    • 请参阅查马莫斯const s = multiply(x, x), 并对其进行辅助multiply(x, x)说明
    • 迟到了,接下来multiply,你会发现乐趣,一切都还不错。 Nós apenas damos um eval em x * ye devolvemos。
    • 返回执行器的功能,删除该命令
  • 在此 3 中,我们无法参考堆栈帧multiply(x, x)。看到一个 linha 徽标,然后执行该命令,é a linha console.log

    • console.logé uma chamada de função, vamos adicionar ao topo da pilha
    • Depois que o console.log(s)é executado, podemos removê-lo da pilha
  • 没有第 4 步,agora temos apenas um único 堆栈框架:printSquare(5), que foi o primeiro que adicionamos

    • 这是一个最初的功能,但在其他方面,这对于最终的功能来说非常重要。堆栈框架的 Retiramos
  • O passo 5 éigual ao passo 0, uma pilha vazia

由于堆栈跟踪是通过堆栈跟踪来完成的,因此无法执行。嗯,堆栈跟踪是一个基本的或令人印象深刻的 pilha de chamadas quando a exceção ocorreu:

function foo () {
    throw new Error('Exception');
}

function bar () {
    foo()
}

function start () {
    bar()
}

start()
Enter fullscreen mode Exit fullscreen mode

打印算法如下:

Uncaught Error: Exception foo.js:2
    at foo (foo.js:2)
    at bar (foo.js:6)
    at start (foo.js:10)
    at foo.js:13
Enter fullscreen mode Exit fullscreen mode

O até só o nosso estado da pilha。

堆栈溢出

不,这是错误的,没有任何错误,无法识别该站点。 Na verdade,该网站接收到的错误名称可能与程序中的错误或开始的节奏有关:或在 Stack Overflow 上发生。

嗯,堆栈溢出错误导致调用堆栈的最大错误。 Pilhas são estruturas de bados,o que importanta que estão alocadas na memória ea memória não é infinita; portanto,isso pode acontecer com bastante facilidade,特别是函数递归não tratadas,como esta:

function f () {
  return f()
}

f()
Enter fullscreen mode Exit fullscreen mode

清洁剂、清洁剂、清洁剂、清洁剂、清洁剂是清洁剂前的一项清洁剂,可在执行前清洁,然后将清洁剂涂抹在清洁剂上ffPortanto, nossa pilha teria o limite de espaço estourado porque não temos nenhuma condição de Finalização:

Felizmente,引擎观察到并发现其功能,导致堆栈溢出,或严重错误,或应用程序内部的错误。不要为 interrompido、pode travar 或 danificar 调用堆栈 como um todo。

单线程的优点和缺点

在单线程环境中执行一个自由的程序,在不同线程的世界中执行一个简单的程序,在竞争条件和死锁时不会出现任何问题。世界上没有任何东西存在,最后,我们的一切都已经结束了。

没有 entanto、单线程 também pode ser muito limitadora。调用堆栈是如何产生的,或者如何解决这个问题?

可爱的小兔子矢量素材下载 非凡图库...

您可以在博客中添加更多内容,在新闻通讯中获取最新消息!

鏂囩珷鏉ユ簮锛�https://dev.to/_staticvoid/node-js-por-baixo-dos-panos-2-entendendo-javascript-3np7
PREV
Node.js 底层 #5 - 隐藏类和变量分配
NEXT
为什么感恩能让你成为更好的程序员