javascript事件循环问题

11 javascript browser this event-loop node.js

我想知道事件循环如何在javascript中工作,我使用的是node.js,但我想同样的问题适用于浏览器.

我有一些异步调用(让我们说setTimeout$.ajaxfs.readFile),一段时间后事件循环执行callback

现在当callback被执行时,幕后发生了什么?它是否会恢复它在调用异步内容时使用的堆栈?

在实践中,回调所处的背景是什么?它是如何工作的?

编辑:谢谢,我看到......还有一个问题,事件循环如何"记住"回调的范围?

Use*_*ode 2

JavaScript 使用函数作用域,作用域规则在所有 JS 环境中都是相同的。正如 Nican 提到的,理解闭包对于了解当前范围内可用的内容非常重要。

基本上,函数“记住”定义它的环境。因此,如果您在回调中使用内联匿名函数,它将可以访问其父函数可用的所有变量以及作为参数传递给它的任何内容。

关于 JavaScript 中的闭包和作用域的一些资源:

Stoyan Stefanov 的《面向对象 JavaScript》一书很好地解释了 JavaScript 中的作用域以及函数的词法作用域如何工作(请参阅第 4 章)。我会向任何认真研究 JS 编程的人推荐这本书。