在Javascript中列出

在Javascript中列出,javascript,arrays,Javascript,Arrays,如何阻止此Javascript代码将迭代的最后一个数字传递给delete函数 <html> <head> <meta charset="utf-8"> </head> <body> <div id="lista"></div> </body> <script type="application/javascript"> var dados = ['v

如何阻止此Javascript代码将迭代的最后一个数字传递给delete函数

<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <div id="lista"></div>
</body>
    <script type="application/javascript">
        var dados = ['vassoura','lixo','papel'];
        function deletar(elemento){
            console.log(elemento);
        }
        function listar(){
            var div = document.getElementById('lista');
            for(i in dados){
                campo = document.createElement("output");
                button = document.createElement("button");
                button.addEventListener("click",()=>{
                    deletar(dados[i]);
                });
                button.innerHTML="deletar";
                div.appendChild(campo);
                div.appendChild(button);
                console.log(i);
                campo.value = dados[i]+" ";
                console.log(dados[i]);
            }
        }
        listar();
    </script>

var dados=['vassoura'、'lixo'、'papel'];
功能代表(elemento){
控制台日志(elemento);
}
函数listar(){
var div=document.getElementById('lista');
为了(我穿着护墙裙){
campo=document.createElement(“输出”);
按钮=document.createElement(“按钮”);
按钮。addEventListener(“单击”,()=>{
德莱塔(护墙板[i]);
});
button.innerHTML=“deletar”;
儿童部(坎波);
div.appendChild(按钮);
控制台日志(i);
campo.value=dados[i]+“”;
console.log(dados[i]);
}
}
listar();


它传递的是与迭代相对应的最后一个数字,因为当我单击按钮时,迭代已经完成了

看起来这是一个具有可变范围的常见错误


最简单的方法是使用闭包或将(我在护墙板中)替换为(让我在护墙板中)首先,获取护墙板的长度。当i=dados_length(最后一个元素)时检查,然后跳过你想跳过的代码。

这个问题实际上是一个重复的操作。。。对不起,伙计们…可能是重复的