关于源代码this的问题

来源:9-22 编程练习

慕瓜6239116

2017-07-24 00:43

 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]代替么

写回答 关注

2回答

  • 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";
    	} 
    	} 
    }


    慕瓜6239...

    非常感谢~~~

    2017-07-25 16:45:14

    共 1 条回复 >

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

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

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

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468060 学习 · 21891 问题

查看课程

相似问题