asynchronous如何处理Javascript中的variables?

假设我有以下代码

var x = 5; for (var i = 0; i < 1000; i++) { x = x + i; } launch(x); function launch(x) { console.log(x); } 

javascript的asynchronous性质是否意味着可能会在for循环结束之前调用函数launch ? 还是只有在x的操作结束后才会调用? 如何确保后者?

更新:我在一个Node.Js应用程序中使用它

没有 。 这只有在for循环会asynchronous运行时才是正确的。

循环退出后, launchfunction将始终生效。 如果你有类似的东西,可能会有所不同

 for (var i = 0; i < 1000; i++) { somethingAsync(i); } launch(x); 

循环仍然会先完成,但somethingAsync(i)可能不会,因为它是asynchronous运行的。 循环总是同步运行,只有循环的内容可能asynchronous运行。 你必须知道你所调用的函数是同步/asynchronous的。

如果循环体是asynchronous的,那么在循环中的所有内容都返回之后,你需要做更多的工作才能运行launch(x)函数。 这个概念被称为承诺 ,基本上允许你说这里有一个asynchronous操作列表的东西,所有这些操作完成后运行这个其他的东西

以下是有关承诺的一些参考资料

更新:上面提到的Node.js和浏览器都是如此。 JavaScript作为语言的语义在两种情况下都是相同的。

JavaScript是完全同步和确定性的,直到你实际调用一个asynchronous构造,如setTimeout或者一个asynchronousHTTP请求。 该代码将按顺序执行。

此代码将同步运行,因为没有asynchronous调用(如$ .get,$ .ajax和jquery中的一些东西)