我有一个可能听起来很愚蠢的问题。在下面的代码中有2个console.log(i)
语句。我想知道为什么第二个console.log(i)
语句在第一次迭代时返回值2而不是1作为前者(即第一个语句i=n
,第二个: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);
}
}
答案 0 :(得分:0)
问题在于,每个addEventListener()
函数中的变量i都绑定到函数外部的同一变量。只需将for循环更改为:
for (let i = 1; i < el1.length; i++)
在带有基于let的索引的循环中,循环中的每次迭代都会有一个新值i,其中每个值都在循环中作用域,因此您的代码可以正常工作。
答案 1 :(得分:0)
我认为你的代码中有一些东西,因为如果你尝试使用两个“console.log()”进行for循环,那就不会那样做