Javascript 冻结添加到eventlistener函数的变量

Javascript 冻结添加到eventlistener函数的变量,javascript,html,Javascript,Html,我有几个元素可以添加eventlisteners,以便捕获事件数据。它工作得很好,但我需要每个都有一个唯一的ID。如果你看下面的代码段,你会发现ID总是最后一个值 var buttons=document.getElementsByClassName'class'; 对于var i=0;i.长度;i++{ VarID=i+1; 按钮[i]。onclick=函数{ 按钮点击按钮; } } 功能按钮点击按钮{ document.getElementById'output'.innerHTML='按

我有几个元素可以添加eventlisteners,以便捕获事件数据。它工作得很好,但我需要每个都有一个唯一的ID。如果你看下面的代码段,你会发现ID总是最后一个值

var buttons=document.getElementsByClassName'class'; 对于var i=0;i.长度;i++{ VarID=i+1; 按钮[i]。onclick=函数{ 按钮点击按钮; } } 功能按钮点击按钮{ document.getElementById'output'.innerHTML='按钮ID:'+ID; } 按钮1 按钮2
这是因为循环变量i和id变量周围的闭包。将变量declarationd更改为let i=0和let id=i+1,以便在每次循环迭代时为它们创建唯一的作用域

var buttons=document.getElementsByClassName'class'; 对于let i=0;i.长度;i++{ 设id=i+1; 按钮[i]。onclick=函数{ 按钮点击按钮; } } 功能按钮点击按钮{ document.getElementById'output'.innerHTML='按钮ID:'+ID; } 按钮1 按钮2
这是因为循环变量i和id变量周围的闭包。将变量declarationd更改为let i=0和let id=i+1,以便在每次循环迭代时为它们创建唯一的作用域

var buttons=document.getElementsByClassName'class'; 对于let i=0;i.长度;i++{ 设id=i+1; 按钮[i]。onclick=函数{ 按钮点击按钮; } } 功能按钮点击按钮{ document.getElementById'output'.innerHTML='按钮ID:'+ID; } 按钮1 按钮2
var不使用块作用域。const最好,因为值不变,但let也可以工作。@PatrickRoberts,谢谢!永远也找不到。似乎这个问题以前就有答案了。现在无法删除它,因为有答案,尽管.var不使用块作用域。const最好,因为值不变,但let也可以工作。@PatrickRoberts,谢谢!永远也找不到。似乎这个问题以前就有答案了。现在无法删除,因为有答案。从技术上讲,您只需将id更改为let或const即可。我仍然可以说,从技术上讲,你只需将id更改为let或const即可。我还是可以的