【问题标题】:Async / sync: how can I be sure a Javascript function will execute after the for loop?异步/同步:如何确定 Javascript 函数将在 for 循环后执行?
【发布时间】:2019-01-22 11:52:02
【问题描述】:

例如,我有这样的代码:

var smth = '';
for (var i = 0; i < 10; i++) {
    // Some long function I call from elsewhere
    for (var k = 0; k < 10000; k++) {
       smth += k + ' '; 
    }
    smth += i;
}
console.log(smth);

我能否确定console.log 将始终在for 循环处理完我的smth 参数后执行?

所有异步/同步执行如何?我将如何重写代码以使console.logfor 循环同时执行?

【问题讨论】:

标签: javascript asynchronous synchronous


【解决方案1】:

Javascript 同步执行代码,即一次一行。这意味着 console.log 语句将在 for 循环完成执行后执行。

【讨论】:

    【解决方案2】:

    for loop 是阻塞任务,因此在这种情况下,您的 console.log() 将始终在 for 循环之后执行。

    【讨论】:

    • 还有foreach?他们也挡住了?任何循环都是非阻塞的吗?
    • Javascript 是单线程环境,只有异步函数是……嗯 async
    【解决方案3】:

    我可以确定console.log 将始终在for 循环完成处理我的smth 参数后执行吗?

    是的。没有什么异步的。

    所有异步/同步执行怎么样?

    那里没有任何异步代码。

    我将如何重写代码以使 console.log 与 for 循环同时执行?

    您需要使代码非阻塞。核心 JavaScript 中没有任何内容。一些宿主环境通过工作线程提供了一种形式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 2017-12-16
      相关资源
      最近更新 更多