尽管有if语句,代码仍在所有循环中运行

问题描述 投票:0回答:1

我正在使用ejs。无论我的语句返回什么(无论“ currentGame”是什么),我的输出始终为12。或返回并尝试使用其他循环(例如“开关盒”或“ while”),但没有帮助。如果在每个循环中创建console.log,我将得到{1、2、3 ... 12}作为输出。

"<%var x%>"

  "<%for(var i=1; i<=12; i++){%>"
  if(currentGame === "<%=i%>"){
      "<%x=i;%>"
  }

"<%}%>"
console.log("<%=x%>")```
javascript ejs
1个回答
1
投票

您需要使用块范围变量。

The Difference Between Function and Block Scope in JavaScript

使用let代替var

for(let i=1; i<=12; i++)

要了解有关variable in for的更多信息,请点击此链接:Why Does JavaScript Loop Only Use the Last Value?

以上链接的解释:

解决问题的方法首先是了解JavaScript的工作原理-特别是闭包的工作原理。当您使用在范围之外声明的变量时,它将使用该变量在其运行时所具有的值。在设置闭包时,它不会获得值的副本。如果您将闭包视为指针而非值,那么可能会有所帮助。

因此,在我们的工作示例中,当代码实际运行时,10会吐出到控制台10次,因为到代码运行时,这就是我所拥有的值。也许您以为会是9。但是循环由于我12岁而停止循环。

© www.soinside.com 2019 - 2024. All rights reserved.