for和foreach的一点总结
两者都是数组的循环遍历,但是区别还是有点;
for循环,如果块内有事件操作,那么i是不会等事件操作时候在依次增加,而是一次性走完,,也就是依靠下标定位,下标已经走完了,而foreah是依次增加,它是依靠里面每个元素定位,可能语言不带明白,一个例子说明一下
首先for的例子:
var tag=document.getElementsByTagName("button"),i= 0,len=tag.length; for(;i<len;i++){ (function(i){ tag[i].onclick=(function(){ console.log(i) console.log(tag[i].innerHTML) }) })(i) } 这是经典的闭包实例,如果用for+var,就必须闭包,或者用this,不然报错
再看foreach:
[].slice.call(tag).forEach(function(item,i){ item.onclick=function(){
console.log(i) console.log(item.innerHTML) } }) 由于foeach是根据每个元素定位,所以正常