我使用for循环用数组中的值填充HTML表。每行都需要一个链接到不同URL的按钮。
thisbutton.addEventListener("click", function(){ window.location.href = finalurl; });
字符串finalurl更改循环的每次迭代。但是它将它作为引用传递,因此在下一个循环中finalurl更改时,事件侦听器仍然与它绑定。这意味着页面上的每个按钮都链接到同一个URL。 我需要一种方法在该函数中传递一个克隆,到目前为止我发现的所有深度复制/克隆方法都需要我设置一个单独的变量,它不会有帮助,因为这也会过度写入。
提前致谢, 汤姆
答案 0 :(得分:0)
当您使用任何异步代码时,使用for
循环,尤其时,请注意使用let
或const
以避免提升。更好的是,完全避免for
循环,而是使用数组函数,例如forEach
。
在finalurl
循环中声明for
时,请执行以下操作:
const finalurl = '<insert url here>'
当您使用var
时,变量会被提升到函数的顶部,因此一旦for
循环结束,仍然只有一个finalurl
被重新分配多次,finalurl
与您附加的所有听众都看到的相同。
由于finalurl
是一个原始字符串,它不通过引用传递 - 这不是问题。