关于这方面的文章实在太多了,就简单拿个例子说说。
周二晚上刚刚有网易的在线笔试题,其中一道编程题是给一个<ul>列表,点击某行时,改行背景变红。本人代码如下:
<html>
<body>
<ul id="list">
<li>111111</li>
<li>222222</li>
<li>333333</li>
</ul>
</body>
<script type="text/javascript">
var li_arr = document.getElementById("list").getElementsByTagName("li");
//alert(li_arr.length);
for(var i = 0; i< li_arr.length;i++){
(function(_i){
li_arr[_i].onclick = function(){
for (var j = 0 ; j < li_arr.length;j++){
li_arr[j].style.backgroundColor = "white";
}
this.style.backgroundColor = "red";
}
})(i);
}
</script>
</html>
这里就用到了闭包概念。看下面的代码
for(var i = 0; i< li_arr.length;i++)
alert(i);
执行上面这段代码,alert的结果一直是3,因为alert获取的是i结束后的值,这时候应该使用闭包,是内部的函数能获取外部的值
for(var i = 0; i< li_arr.length;i++){
(function(_i) {
li_arr[_i].onclick = function(){
alert(_i);
}
})(i);
}
简单讲就是在内部再定义一个函数,将外部的变量当作参数传递进去才行。