说是不能读取classList这个属性,我写的代码是这样的
let lis = document.querySelectorAll(".tab .tab-item");
let divs = document.querySelectorAll(".products .main");
for (let i = 0; i < lis.length; i++) {
lis[i].addEventListener("click", function () {
document.querySelector(".tab .active").classList.remove("active");
this.classList.add("active");
console.log(this);
document.querySelector(".products .active").classList.remove("active");
divs[i].classList.add("active");
});
}
写到divs[i]这里一直报错,我打印是undefined,我就一直想不通
直到我看见了for循环里面的i,for循环里面的i如果不声明默认是全局变量,如果不加let就会出问题
至于为什么,我搜了一下,说是
用 var 声明时,变量 i 是唯一的,每一次 i 的改变都改变了自身的栈地址。
所以循环结束后访问 i 时,都通过 i 最后一次存放的栈地址,获取到其指向的基本量。
虽然我也没太看懂,但是
一定要记得写let!!!!!