异步如何处理 Javascript 中的变量
How does asynchrony deal with variables in Javascript?
假设我有以下代码
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应用程序中使用它
No.仅当for
周期异步运行时,这才是正确的。
函数launch
将始终在循环退出后引起。区别可能是如果你有类似的东西
for (var i = 0; i < 1000; i++) {
somethingAsync(i);
}
launch(x);
循环仍将首先完成,但somethingAsync(i)
可能不会完成,因为它是异步运行的。循环始终同步运行,只有循环的内容可以异步运行。你必须知道你调用的函数是同步的还是异步的。
如果循环体是异步的,则必须做更多的工作来运行函数,launch(x)
循环中的所有内容都返回后。这个概念叫做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 是完全同步和确定性的,直到你实际调用异步构造(如setTimeout
或异步 HTTP 请求(。该代码将按顺序执行。
这段代码将同步运行,因为没有异步调用(如 $.get、$.ajax 和来自 jquery 的一些东西(
相关文章:
- 将函数的上下文应用于javascript变量
- 如何通过ajax刷新JSF填充的javascript变量
- Javascript变量赋值|
- 限制javascript变量的最小/最大整数
- 来自文本输入null的html javascript变量
- 访问jsrender模板中的全局javascript变量并更新它
- 从数据库中获取数据并插入JavaScript变量
- 如何将javascript变量传递到Meteor Spacebars模板中
- 将JavaScript变量保存到Rails模型
- 在if语句下的html中使用javascript变量
- Javascript变量分配-按类别
- 操作javascript变量[HTML]以只显示文本
- 无法比较javascript变量
- 如何将smarty变量与javascript变量进行比较
- 如何使用PHP将javascript变量添加到mysql数据库中
- Javascript 变量使用 jquery 查找变量
- 重新加载页面时Javascript变量发生变化
- 在asp classic中使用javascript变量
- 全局Javascript变量变为null
- 如何向服务器端提交javascript变量