【问题标题】:For loop is executed asynchronously in javascript? [duplicate]For循环在javascript中异步执行? [复制]
【发布时间】:2020-02-04 06:46:58
【问题描述】:

在下面的示例中,为什么它记录 512,而不是 1?我知道 javascript 是同步的,所以日志记录不应该在 for 循环完成之前很久吗?出于这个原因,我在登录时期望结果 = 1。

let result = 1;
for (counter = 1; counter < 10; counter ++) {
    result = result * 2;
}
console.log(result);

【问题讨论】:

  • 不确定这是否是拼写错误,但请回复:“我理解 javascript 是同步的”:它同步的,除非您执行异步操作。该代码是同步的,因此循环之后的代码在循环完成之前不会执行。否则一切都需要回调。
  • 在大多数情况下,大多数 javascript 表达式是顺序的(同步的),包括循环。还有一些异步方法,比如setTimeoutsetIntervalXMLHttpRequest,也是顺序发起的,但是异步等待返回或者回调。
  • 为什么会这样?循环在日志之前执行。

标签: javascript execution synchronous


【解决方案1】:

这里的问题是您何时登录。

当您记录“result”的内容时,for 循环完成,并且“result”变量的值已在每次循环迭代中更新。

以下可能说明这一点

let result = 1;
console.log(result);
console.log("loop start");
for (counter = 1; counter < 10; counter ++) {
    console.log(result);
    result = result * 2;
}
console.log("loop end");
console.log(result);

会给你以下结果:

1
loop start
1
 2
 8
 16
 32
 64
 128
 256
loop end
 512

【讨论】:

    【解决方案2】:

    JavaScript 同步意味着一个线程工作,所以这个操作是迭代的 你可以看到这个link了解更多信息

    注意 :)

    【讨论】:

    • 请不要只链接到另一个答案。
    【解决方案3】:

    Synchronous:表示一次只能进行一项操作。

    根据此定义,您的 console.log() 函数只会在循环执行完毕后执行。

    如果您希望代码在执行循环时运行console.log(),则意味着您的代码是异步的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      相关资源
      最近更新 更多