Javascript 我试图获取按钮id,但它没有';是关于范围的吗?

Javascript 我试图获取按钮id,但它没有';是关于范围的吗?,javascript,Javascript,每次单击“退出”4个非预期按钮:是否与范围有关 <button id="button-1">one</button> <button id="button-2">two</button> <button id="button-3">three</button> <p>Then you assign click event handlers in a loop: </p> <script>

每次单击“退出”4个非预期按钮:是否与范围有关

<button id="button-1">one</button>
<button id="button-2">two</button>
<button id="button-3">three</button>
<p>Then you assign click event handlers in a loop: </p>
<script>
    for (var i = 1; i <= 3; i++) {
        // alert(i);
        document.getElementById('button-' + i).onclick = function(){
            alert("This is button: " + i);
        };
    }
</script>
1
二
三
然后在循环中指定单击事件处理程序:


对于(var i=1;i您必须使用
let
来修复它

for (let i = 1; i <= 3; i++) {
  document.getElementById('button-' + i).onclick = function(){
   alert("This is button: " + i);
  };
}

用于(let i=1;我认为它可以正确地与let一起工作,但我没有理解它-我读到了let和var之间的区别-我认为var比let更具全局性?你能表达更多吗?@Mohamed在javascript中,在你使用let之前不会有块级范围。在你的代码中看到的问题是缺少对闭包的维护。谢谢你的帮助:)
for (var i = 1; i <= 3; i++) {
 (function(i) {
   document.getElementById('button-' + i).onclick = function(){
    alert("This is button: " + i);
   };
 })(i);
}