qq_二冬_0
2016-07-26 23:12
for(var i= 0;i<oLis.length;i++){ oLis[i].index = i; oLis[i].onclick = function(){ for(var n= 0;n<oLis.length;n++){ oLis[n].className = ""; oDivs[n].className = "hide"; } this.className = "on"; oDivs[this.index].className = ""; } }
这是编程挑战给出的实现选项卡切换的JS代码,在这里是利用遍历li标签,实现点击的时候添加类实现的CSS样式不同我是理解的。但是在变量li标签时,我认为他给li的index属性赋值是为了人为制造一个索引值,而且他认定了li标签出现的顺序是和对应的div标签出现的顺序一致,所以this.index才可以指向对应的div标签。我想问的是,他这个应该是在已知li和div的顺序的情况下写出的代码,也就是如果是一个黑盒的话,就不能直接用this.index去索引div标签了吧?
同学不知道你知不知道闭包的概念,他这里使用oLis[i].index = i;是为了避免了闭包,使得onclick之后i的值不是固定值3,和div顺序没什么关系
for(var i=0;i<liObjs.length;i++){
(function(i){
liObjs[i].onclick=function(){
for(var n=0;n<3;n++){
liObjs[n].className="";
divObjs[n].className="hide";
this.className="on";
divObjs[i].className="";
}
}
})(i);
这是我写的用(function(i){})(i)解决了闭包,这也是很常用的方法
JavaScript进阶篇
468796 学习 · 22582 问题
相似问题