从字符串动态创建按钮事件侦听器而不覆盖

Dynamically create button event listeners from a string without overwriting

我正在使用 for 循环用数组中的值填充 HTML table。每行需要一个链接到不同 URL.

的按钮
thisbutton.addEventListener("click", function(){ window.location.href = finalurl; });

字符串finalurl 改变循环的每次迭代。但是它将它作为引用传递,因此当 finalurl 在下一个循环中发生变化时,事件侦听器仍然与它相关联。这意味着页面上的每个按钮都会链接到相同的 URL.

我需要一种在该函数内部传递克隆的方法,到目前为止我发现的所有深度 copying/cloning 方法都需要我设置一个单独的变量,这没有帮助,因为这会覆盖还有。

使用 for 循环时,尤其是 当您使用任何异步代码时,注意使用 letconst避免吊装。更好的是,完全避免 for 循环,而是使用数组函数,例如 forEach.

for 循环中声明 finalurl 时,执行如下操作:

const finalurl = '<insert url here>'

当你使用 var 时,变量被提升到函数的顶部,所以一旦 for 循环结束,仍然只有一个 finalurl 被重新分配多次,并且 finalurl 与您附加的所有听众所看到的相同。

因为 finalurl 是原始字符串,它 不会 通过引用传递 - 这不是问题。