问答详情
源自:9-22 编程练习

关于源代码this的问题

 function Highlight(){

var tbody = document.getElementById('table').lastChild;

trs = tbody.getElementsByTagName('tr');   

for(var i =1;i<trs.length;i++){

trs[i].onmouseover = function(){

this.style.backgroundColor ="#f2f2f2";

trs[i].onmouseout = function(){

this.style.backgroundColor ="#fff";

}  

}


上面的this,能用trs[i]代替么

提问者:慕瓜6239116 2017-07-24 00:43

个回答

  • Nika_
    2017-07-25 11:38:06
    已采纳

    不可以,trs[i]不在匿名函数的作用域内,除非将trs[i]以参数传到函数内部,你可以试下,如下代码trs[i]的结果是undefined

    HTML部分

    <table>
    	<tr>
    		<td>TD11</td>
    		<td>TD12</td>
    	</tr>
    
    	<tr>
    		<td>TD21</td>
    		<td>TD22</td>
    	</tr>	
    </table>

    JS部分

    window.onload=function(){
    	var tbody = document.getElementsByTagName('tbody')[0];
    	trs = tbody.getElementsByTagName('tr');   
    	for(var i =0;i<trs.length;i++){
    	trs[i].onmouseover = function(){
    		console.log(trs[i]);
    		// trs[i].style.backgroundColor ="#f2f2f2";
    	} 
    	trs[i].onmouseout = function(){
    		// trs[i].style.backgroundColor ="#fff";
    	} 
    	} 
    }


  • 慕圣4526135
    2017-07-25 04:30:20

    不可以,trs[i]作用域不在函数内部,可以想象下此函数本应该在外边写的,而现在是没有给起名字,作为匿名函数使用,也就是说for循环只有此函数的引用,而函数体本身是没有在for内的

    ——大概是这样,这个我也有些模糊