Javascript IE 11中的AddEventListener函数变量范围问题

Javascript IE 11中的AddEventListener函数变量范围问题,javascript,addeventlistener,Javascript,Addeventlistener,我有一个在Chrome中运行良好的函数,但在IE中测试时,它无法访问函数外部的变量: if (cipher[i].solved == false){ bottom.classList.add("HighlightBox"); bottom.classList.add("bg-warning"); bottom.addEventListener('click', function(){ // IE cannot access ciph

我有一个在Chrome中运行良好的函数,但在IE中测试时,它无法访问函数外部的变量:

if (cipher[i].solved == false){
    bottom.classList.add("HighlightBox");            
    bottom.classList.add("bg-warning");
    bottom.addEventListener('click', function(){
        // IE cannot access cipher[i] in this function
        cipher[i].solved = true;
        hintsUsed++;
        runHint(true);
        populateAnswerKey(puzzleWord, cipher, false);
        populatePuzzleBoard(puzzleWord, cipher);

    });
} 
IE无法访问密码[i](尽管它在Chrome中运行良好)。是否有一种方法可以传递密码[i],或者我可以进行另一种简单的调整,以便IE在创建事件侦听器时可以访问该变量

编辑:经过更多测试后,问题似乎是IE没有保留迭代器[i]的值。无论单击哪个事件,它始终比最终通过高一个。Chrome可以保留迭代器的值

EDIT2:-这就是游戏。它在Chrome中工作,但在IE的(我的版本)中,当我单击“使用提示”,然后单击其中一个框时失败。

“let”在Internet Explorer中存在问题。简单的解决办法是改变:

for (let i = 0, i < cipher.length; i++){
    // code  
} 
for(设i=0,i

for(设k=0,k
由于IE通常没有这样的问题,您可能使用了它不支持的东西,因此提供一个工作代码段来复制issueChrome可以保留迭代器的值,我对此表示怀疑。。。请共享一个工作代码段。您的代码错误,而不是浏览器错误!这个代码部分在循环中,对吗?你是怎么宣布“我”的?用“let”还是用“var”?有不同的解决方法,但如果这是在一个循环中,那么您的代码肯定是错误的。@Adriano-我用“let”来声明I。其他任何东西都会破坏密码。
for (let k = 0, k < cipher.length; k++){
    let i = k;
    // code  
}