我正在使用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%>")```
您需要使用块范围变量。
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岁而停止循环。