js中for循环切换背景的问题

一个简单的换背景JS程序,但输出的总是12,感觉FOR循环没起来问题,是哪里出了问题呢?
li总有12个

var OMain = document.getElementById("main");
/*获取标签组名*/
var OLi = document.getElementsByTagName("li");

for(var i=0;i<OLi.length;i++){
OLi[i].onclick = function()
{
alert(i);
OMain.style.background = "url(img/32_"+i+".jpg)";
OMain.style.backgroundSize = "cover";
}
}

Javascript 没有 块作用域

只有 函数闭包作用域(当然 ECMA6就有块作用域了, 不过可以无视


观察你的代码, 可以看出, background的i是在onclick时确定的, 此时循环体早都执行完了, 故不管你点哪个都是12(OLi.length)


改法多种, 只举一例

for(var i=0;i<OLi.length;i++) ~function(i){

    OLi[i].onclick = function()
    {
     alert(i);
     OMain.style.background = "url(img/32_"+i+".jpg)";
     OMain.style.backgroundSize = "cover";
    }
}(i)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-14
Javascript
没有
块作用域
只有
函数闭包作用域(当然
ECMA6就有块作用域了,
不过可以无视
观察你的代码,
可以看出,
background的i是在onclick时确定的,
此时循环体早都执行完了,
故不管你点哪个都是12(OLi.length)
改法多种,
只举一例
for(var i=0;i
评论
0
0
加载更多
相似回答