首页 > 解决方案 > JavaScript 为什么添加事件监听器时for循环的索引会加一

问题描述

我有一个听起来很傻的问题。在下面的代码中有 2 个console.log(i)语句。我想知道为什么第二个console.log(i)语句在第一次迭代时返回 2 而不是 1 作为前者的值(即 1st statement i=n, 2nd: i=n+1)。在循环结束之前不应该都等于 1 吗?

function toggleWrapper(){
    var el1 = document.querySelectorAll('[class="tCell entryDesc"]');

    for (var i = 1; i < el1.length; i++) {
        console.log(i);
        el1[i].addEventListener('click', function(ev){
             console.log(i);
             var el2=document.querySelectorAll('[class="additionalInfoContainer"]');
             if (el2[i-2].clientHeight) {
                 el2[i-2].style.maxHeight = 0;
             }
             else{
                 el2[i-2].style.maxHeight = el2[i-2].scrollHeight +"px";
             }
        },
        false);
    }
}

标签: javascriptarraysloopsaddeventlistener

解决方案


我认为这是您的代码中的某些内容,因为如果您尝试使用两个“console.log()”创建一个 for 循环,它不会那样做


推荐阅读