假设我有以下代码
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 应用中使用它
最佳答案
否。仅当 for
循环异步运行时才会出现这种情况。
launch
函数总是在循环退出后触发。不同之处在于,如果你有类似的东西
for (var i = 0; i < 1000; i++) {
somethingAsync(i);
}
launch(x);
循环仍将首先完成,但 somethingAsync(i)
可能不会,因为它是异步运行的。循环始终同步运行,只有循环的内容可能异步运行。您必须知道您调用的函数是同步的还是异步的。
如果循环体是异步的,则在循环中的所有内容返回后,您必须做更多的工作才能运行函数 launch(x)
。这个概念称为 promises,它基本上允许您说这是一个异步操作列表,在所有这些操作完成后运行其他东西。
这里有一些关于 promises 的引用资料
- > http://www.html5rocks.com/en/tutorials/es6/promises/
- > https://developer.mozilla.org/cs/docs/Web/JavaScript/Reference/Global_Objects/Promise
- > https://www.promisejs.org/
更新: 上面提到的对于 Node.js 和浏览器都是正确的。在这两种情况下,JavaScript 作为语言的语义是相同的。
关于javascript - 异步如何处理 Javascript 中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27203869/