window.onload= function () {
var box=document.getElementById('divselect'),
menu=box.getElementsByTagName('ul')[0];
as=box.getElementsByTagName('a');
title=box.getElementsByTagName('cite')[0],
lis=box.getElementsByTagName('li');
//点击三角
box.onclick= function () {
menu.style.display = "block";
};
//遍历as
for (var i=0,l=as.length;l>i;i++) {
as[i].onmouseover= function () {
as[i].style.background = "#456"; 这里为啥不能用as[i],非要用this,一直想不明白,请解释的详细一点,比较笨谢谢大神
};
}
};
这就好比双色球摇奖的时候先出来的六个球,出来一个被人拿走一个,等六个球都拿完了你再想用只能去用第七个了。实际上这是js的垃圾回收机制在作怪,事件发生后变量使用完毕在内存里立马就会被销毁,所以不会有剩下的,而使用this指代当前对象,你鼠标经过的是哪个它对应的就是哪个
原理就是用as[i]具体的执行结果就是每个 as[i].onmouseover后面的代码都不会被执行,只是输出 function () {
as[i].style.background = "#456" 这个函数语句,因为这个function构成了一个闭包。
如果想要按照 as[i]这种写法的可以 写成 for (var i=0,l=as.length;l>i;i++) {
as[i].onmouseover=(function () {
as[i].style.background = "#456")(); 这样后面的代码会立即的执行。