Document
上面是全部代码,其中第一个for循环处:
/*slider navigator dots*/
for (let /*在这里*/ i = 0; i < sliderNavs.length; i++) {
sliderNavs[i].onmouseover = function() {
if (timer) clearInterval(timer);
changeImg(i);
};
如果改为let 则不会报错,如果是var 则出现如下错误:
3js轮播3.html:162 Uncaught TypeError: Cannot read property 'style' of undefined
请问为了改为var而不是let,我应该如果修改代码?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
因为使用
let定义的变量只在当前的块级作用域有效,所以,使用let就能够避免你的for循环的函数在循环结束之后执行。但是,使用var就不同了。使用var定义的变量,是不存在块级作用域的。所以,当你使用var的时候,其实循环已经执行完了,你的i的值就是sliderNavs.length,当然就会报错。所以,你需要一个闭包来保存i的值。所以,把你的for循环的代码改成这样:
你出错的是 162 行,这一句
@Erichain_Zain 解释到位了。就补充个关于let的链接好了
这是一个典型的闭包问题.
先看下面这段程序,看看结果为什么是这样.
你用var的时候产生了闭包. 在你那个循环最后i变成了6, 把i=6的情况传给了changeImg, 导致了错误.