Javascript:我可以避免闭包吗?

Javascript:我可以避免闭包吗?,javascript,Javascript,我正在尝试建立一个网站。我将addEventListener添加到一个名为“更多次”的函数中的更多元素: idImag = 0; function function1() { //do something function2() } function function2() { //do something document.getElementById("holder" + id

我正在尝试建立一个网站。我将addEventListener添加到一个名为“更多次”的函数中的更多元素:

    idImag = 0;

    function function1()
    {
        //do something
        function2()
    }

    function function2()
    {
        //do something
        document.getElementById("holder" + idImag).addEventListener('mouseover',function(){
         idImag++;
alert('It works');
    }

    function3(event)
    {
        alert(3);
    }

    function1();
    function1();

<div id="holder0">Dog</div>
<div id="holder1">Chicken</div>
<div id="holder2">Cow</div>
idImag=0;
函数function1()
{
//做点什么
职能2()
}
函数function2()
{
//做点什么
document.getElementById(“holder”+idImag).addEventListener('mouseover',function(){
idImag++;
警报(“它工作”);
}
职能3(活动)
{
警惕(3);
}
功能1();
功能1();
狗
鸡
母牛
但有一个问题:只有最后一个元素获得事件侦听器……其他元素在将鼠标放在它上面后什么也不做。 然后我在谷歌上搜索了一下,发现了闭包以及函数返回后变量是如何保存的……我不完全理解,但我只是想知道如何在函数2中放置事件侦听器。你能帮我吗? 也许你注意到了:我是一个新手。如果这个问题很愚蠢或者没有意义,我很抱歉。如果你需要更多的细节,我会把我的整个代码都写下来,但是它有罗马尼亚语的变量和注释,所以我不确定你是否能理解。对不起我的英语不好,提前谢谢你。

为什么不写一个for循环

function function3 (event) {
    alert(3);
}

for (var idImag = 0; i< numberOfHolders; i++) {
    //do something1
    //do something2
    document.getElementById("holder" + idImag).addEventListener('mouseover',function3);
}
功能3(事件){
警惕(3);
}
对于(var idImag=0;i
看起来您只关心图像id,该id可通过元素的id属性获得

因此,您可以:

document.getElementById("holder" + idImag).addEventListener(
    'mouseover',
    function(){
        var id = this.id;
        /* Then strip off "holder" from the front of that string */
    }
);

这看起来是正确的,因为它将调用
document.getElementById(“holder0”).addEventListener(…)
,然后它将调用
document.getElementById(“holder1”).addEventListener(…)
。闭包不是您的问题

您可以通过使用
console.log
记录要添加事件侦听器的元素来验证这一点(您需要安装Firebug,或者打开Chrome的开发者控制台)


可能将代码粘贴到以便我们可以尝试它?

是的,您应该添加更多的代码。您当前的代码没有显示任何有关事件处理程序的问题。代码似乎已被切断,您是否可以在addEventListener调用中发布您提供的事件处理程序函数?看起来应该可以工作。可能您需要
var idImag=0;
在to处p?不说
var
应该只是指
window.idImg
,因此您可以使用该引用,并确保
window.idImg
是递增的。此外,
函数3
函数(?)不解析,与其余部分无关。请发布真实的、可解析的代码。说真的,要么发布实际复制您的问题的有效代码,要么不要麻烦。