11

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

我有一些异步调用(比如说setTimeoutor $.ajaxor fs.readFile),过了一会儿,事件循环执行callback

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

在实践中,回调所处的上下文/this 是什么?它是如何工作的?

编辑:谢谢,我明白了.. 还有一个问题,事件循环如何“记住”回调的范围?

4

2 回答 2

2

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

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

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

Stoyan Stefanov 的书Object-Oriented JavaScript很好地解释了 JavaScript 中的作用域以及函数的词法作用域如何工作(参见第 4 章)。我会向所有认真对待 JS 编程的人推荐这本书。

于 2011-06-25T06:59:32.650 回答
0

Philip Roberts 创建了一个名为Javascript Loupe的好工具,它可以帮助您了解 javascript 的调用堆栈/事件和循环/回调如何相互作用。在编辑器中编写一些 javascript 代码并尝试运行它。

于 2016-07-26T07:44:43.167 回答