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

标签 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 应用中使用它

最佳答案

。仅当 for 循环异步运行时才会出现这种情况。

launch 函数总是在循环退出后触发。不同之处在于,如果你有类似的东西

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

launch(x);

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

如果循环体是异步的,则在循环中的所有内容返回后,您必须做更多的工作才能运行函数 launch(x)。这个概念称为 promises,它基本上允许您说这是一个异步操作列表,在所有这些操作完成后运行其他东西

这里有一些关于 promises 的引用资料

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

关于javascript - 异步如何处理 Javascript 中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27203869/

相关文章:

javascript - 如果我不想等待 2 个方法而是等待两个方法都完成怎么办

c# - 澄清与节流并行运行多个异步任务

javascript - message.content.includes 不适用于此代码

javascript - 焦点在 Chrome 上的输入中不起作用

javascript - 如何使用 JavaScript 或 jQuery 在多维 JSON 对象中找到特定节点的最大值

javascript - 如何实现配置文件以替换 node.js Web App 中的文字值

node.js - 我可以强制链接 node@6 吗?

javascript - 我如何等到异步循环完成后才发送快速响应?

android - Android 中的 AsyncCallBack 是什么?

javascript - 检测是否从代理或目标调用代理 getter