js闭包

来源:互联网 发布:广州淘宝大学学费多少 编辑:程序博客网 时间:2024/04/28 05:04

关于这方面的文章实在太多了,就简单拿个例子说说。


周二晚上刚刚有网易的在线笔试题,其中一道编程题是给一个<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);}

简单讲就是在内部再定义一个函数,将外部的变量当作参数传递进去才行。


0 0