js中變量的作用域是怎么一回事?
as=box.getElementsByTagName('a');
for(var i=0; i<as.length; i++) {
??????? as[i].onmouseover = function() {
??????????? this.style.background = '#D0D6D9';
??????? }
??????? as[i].onmouseout = function() {
??????????? this.style.background = '#FFF';
??????? }
??????? as[i].onclick = function() {
??????????? title.innerHTML = this.innerHTML;
??????? }
??? }
上段代碼中,使用this.style可以而使用as[i].style為什么不可以???
2016-04-18
你綁定事件是i只是個(gè)引用,循環(huán)結(jié)束后i的值就變了,你可以試試每次輸出的i都死i.length.在js中for是無(wú)作用域的。執(zhí)行dom節(jié)點(diǎn)操作時(shí)取得便是for最后的i++的值.這是JavaScript一個(gè)經(jīng)典問(wèn)題:在遍歷數(shù)組時(shí)對(duì)DOM監(jiān)聽(tīng)事件,索引值始終等于遍歷結(jié)束后的值.
解決方法:
方法一:利用必包
for(var i=0;i<as.length;i++){
? ? (function (_i){
? ? ?as[_i].onmouseover = function() {
??????????? this.style.background = '#D0D6D9';
??????? }
??????? as[_i].onmouseout = function() {
??????????? this.style.background = '#FFF';
??????? }
??????? as[_i].onclick = function() {
??????????? title.innerHTML = this.innerHTML;
??????? }
})(i);
}
方法二:給DOM節(jié)點(diǎn)添加_index屬性,屬性值等于索引
for(var?i=0;i<as.length;i++){
????as[i]._index=i;
????as[i].onclick=function(){
????????as[i].onmouseover = function() {
??????????? this.style.background = '#D0D6D9';
??????? }
??????? as[i].onmouseout = function() {
??????????? this.style.background = '#FFF';
??????? }
??????? as[i].onclick = function() {
??????????? title.innerHTML = this.innerHTML;
??????? }
????}
}??