Javascript JS-一种在迭代时获取变量值而不是引用的方法?

Javascript JS-一种在迭代时获取变量值而不是引用的方法?,javascript,Javascript,我遇到了一个有趣的情况,我想知道一个非常简单的修复方法是什么,换句话说,一个有经验的开发人员将如何处理这个问题 for(i = Math.min(storedAry.length,3)-1; i >=0; i--){ var currentElementName = storedAry[i][1]; var currentElementID = storedAry[i][0]; var window_location = `BusTracking.html?id=${curre

我遇到了一个有趣的情况,我想知道一个非常简单的修复方法是什么,换句话说,一个有经验的开发人员将如何处理这个问题

for(i = Math.min(storedAry.length,3)-1; i >=0; i--){
  var currentElementName = storedAry[i][1];
  var currentElementID = storedAry[i][0];
  var window_location = `BusTracking.html?id=${currentElementID}&name=${currentElementName}`;
  document.getElementById('recents').innerHTML+=`<button type="button" class="btn btn-success" style='margin-bottom:20px;' onclick="window.location = window_location">${currentElementName}</button><br/>`;

}
我正在遍历一个数组,并将按钮设置为在单击时重定向到相应的URL。但是,上面的脚本将设置window.location=window\u location,这是在用户单击按钮时计算的,因此无论单击哪个按钮,它都会将用户带到单击此处时window\u location值所在的页面,即循环的最后一次迭代


我想知道如何在每次for循环运行时强制计算这个变量。一个可能的解决方案可能是在访问window_位置时访问数组,但我觉得应该有一种类似于PHP的方法来实现这一点。

您可以简单地将变量的值替换为模板字符串

document.getElementById('recents').innerHTML+=`<button type="button" class="btn btn-success" style='margin-bottom:20px;' onclick="window.location = '${window_location}'">${currentElementName}</button><br/>`;

当您使用内联事件处理程序时,情况并非如此。window.location=window\u location在全局范围内计算,并且只能有一个全局window\u location变量。@FelixKling所以在每次迭代时都无法打开window\u位置?例如,Mathematica有一个求值函数来实现这一点。一个解决方案是在迭代过程中单击按钮时不计算窗口位置。您可以对其他变量执行完全相同的操作:将它们的值嵌入到模板文本中:`。。。onclick=window.location='${window\u location}'…`。现在,当单击任何按钮时,window.location='BusTracking.html?…'将被执行。@FelixKling我不知道这对嵌套字符串有效。非常感谢!老派风格。。。window.location='+window_location+'。非常感谢-不知道嵌套字符串允许这样做!您认为window_location和currentElementName之间的区别是什么,允许您替换后者?我的文本编辑器没有对前者进行语法高亮显示,前者嵌套在3个字符串中:外部字符串、onclick字符串和最内部字符串,因此我假设因为它是嵌套的,所以不会计算。