闭包
解决方法如下
for (var i = 1 ; i < 4;i ++) {
var obj = document.getElementById('item' + i);
obj.attachEvent('onmouseover',
function (o) {
return function (e) { hightlight(o); }
}(obj)
);
obj.attachEvent('onmouseout',
function (o) {
return function (e) { normal(o); }
}(obj)
);
}
解决方法如下
for (var i = 1 ; i < 4;i ++) {
var obj = document.getElementById('item' + i);
obj.attachEvent('onmouseover',
function (o) {
return function (e) { hightlight(o); }
}(obj)
);
obj.attachEvent('onmouseout',
function (o) {
return function (e) { normal(o); }
}(obj)
);
}
解决方案 »
- 怎样才能读写网站服务器端的文件呢?
- 一个ie与firefox不兼容的问题。onchange。在线求救!
- 九宫游戏javascript代码
- 请问一个firefox下的提示对话框 confirm password change
- javascript输出问题
- html页面中有js,运行后有警告提示,怎么处理?
- 请问怎么统计一个div里的字符串长度?
- 什么是脚本语言?
- 怎么实现鼠标点击图片换面另一张图片
- easyui-datagrid appendRow问题
- iframe如何传递js变量到父页面并用dxx.write显示变量或动态读取HIDDEN文本框中的内容
- Js数组 是怎么做类似java中的深拷贝的
var obj = document.getElementById('item' + i);
一直在改变,而那些function里引用的正是obj
所以,一直到循环结束
obj 的最后结果是最后一次循环的结果。。
所以
所有遍历的function里都是引用的最后一次的obj的结果而闭包,则重新复制了每次循环的obj的引用,每次的function引用了复制的那些变量。
所以,实现了效果关于闭包
http://blog.csdn.net/muxrwc/archive/2007/11/09/1876342.aspx
这里有介绍
也可以去google or baidu 上艘下:D
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title> 无标题文档 </title></head><body>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td id="item1"> </td>
</tr>
<tr>
<td id="item2"> </td>
</tr>
<tr>
<td id="item3"> </td>
</tr>
</table>
</body>
</html>
<script language="javascript">
function hightlight(o)
{
o.style.backgroundColor='#999999';
}
function normal(o)
{
o.style.backgroundColor='';
}
function addEvent(obj)
{
//这里就是闭包 参数obj在这个闭包里是相对独立的
obj.attachEvent('onmouseover',function(){hightlight(obj);});
obj.attachEvent('onmouseout',function(){normal(obj);});
}
for(var i=1;i<=3;i++)
addEvent(document.getElementById('item'+i));</script>