JavaScript的事件循环问题

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

我有一些asynchronous调用(比方说setTimeout$.ajaxfs.readFile ),一段时间后,事件循环执行callback

现在当callback执行时,幕后会发生什么? 当它调用asynchronous的东西时,它会复活它使用的堆栈吗?

在实践中callback所在的上下文是什么? 它是如何工作的?

编辑 :谢谢,我看..只是一个问题,事件循环如何“记住”callback的范围?

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

基本上,一个函数“记住”它定义的环境。 因此,如果您为callback使用内联匿名函数,则将有权访问其父函数可用的所有variables以及作为parameter passing给它的所有variables。

关于JavaScript中closures和范围的一些资源:

  • 函数和函数范围@ MDC
  • closuresJavaScriptclosures书
  • Stuart Langridge:JavaScript闭包秘诀,第1部分(video)
  • Stuart Langridge:JavaScript闭包的秘密,第2部分(video)

Stoyan Stefanov的书“ 面向对象的JavaScript”在JavaScript中解释范围界定以及函数的词汇范围如何工作方面做了很多工作(见第四章)。 我会把这本书推荐给那些认真对待JS编程的人。

有一个叫做Philip Roberts创build的Javascript放大镜的好工具,它可以帮助您理解javascript的调用堆栈/事件和循环/callback是如何相互作用的。在编辑器中写入一些javascript代码,并尝试运行它。