异步如何处理Javascript中的变量?

时间:2014-11-29 15:29:20

标签: javascript node.js asynchronous

假设我有以下代码

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

launch(x);


function launch(x) {
     console.log(x);
}

javascript的异步性质是否意味着在launch周期结束之前可以调用函数for?或者只有在x上的操作结束后才会调用它?如何确保后者?

更新:我在Node.Js应用

中使用它

3 个答案:

答案 0 :(得分:2)

即可。只有在for周期异步运行时才会出现这种情况。

循环退出后,将始终生成函数launch。不同之处可能在于你有类似

的东西
for (var i = 0; i < 1000; i++) {
     somethingAsync(i);
}

launch(x);

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

如果循环体是异步的,那么在循环中的所有内容返回后,您必须做更多的工作来运行函数launch(x)。这个概念叫做 promises ,它基本上允许你说出像这里的异步操作列表,在所有这些操作完成后运行另一件事

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

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

答案 1 :(得分:0)

在您实际调用setTimeout之类的异步构造或异步HTTP请求之前,JavaScript是完全同步且确定的。该代码将按顺序执行。

答案 2 :(得分:0)

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