为了账号安全,请及时绑定邮箱和手机立即绑定

关于源代码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]代替么

正在回答

2 回答

不可以,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";
	} 
	} 
}


1 回复 有任何疑惑可以回复我~
#1

慕瓜6239116 提问者

非常感谢~~~
2017-07-25 回复 有任何疑惑可以回复我~

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

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

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468047    人
  • 解答问题       21891    个

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

进入课程

关于源代码this的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信