(面向c#开发人员) 编写javascript的好习惯七 闭包1
闭包是一个很强大的功能,但是也很不容易用好
下面是一个负面教材
<ul id="ul1">
</ul>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>
for (var i = 0; i < 10; i++) {
$("<li />", {
id: i,
text: "link " + i,
click: function () {
alert("you have clicked " + i);
}
}).appendTo("#ul1");
}
</script>
最终效果如下所示
所有的文本都是正确的,但是点击任何一个文本 弹出的都是 you have clicked 10
这是因为在点击button的时候才调用click事件
而这个时候才调用 alert("you have clicked " + i);
这时候的i已经是10了 (之前已经循环过了)