87,996
社区成员




(function(i){
return FN; // 这里的FN看第二步
})(i);
这步是马上立刻被执行的,所以你li[i].onclick最终绑定的其实是FN,在这里用个立即函数来包装,我想是为了确保i的值是正常的(就是alert时候i是1,2,3....)
第二步:就是上面的FN也就是onclick事件真正绑定的处理函数,其实它就是:
var FN = function(){ alert(i);} // 其中i就是立即函数的参数
综合下,把两个步骤集合在一起其实就是楼主那段代码了,也就是你点li1弹出1,点2弹2的结果了,而所谓的闭包对于你来说就直接先按函数内嵌来理解吧
li[i].onclick = (function(i){
return function FN(e){
alert(i);
}
})(i);
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
</head>
<body>
<div>
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
<li>E</li>
</ul>
</div>
</body>
</html>
按lz的for循环+闭包
<script type="text/javascript">
jQuery(function($){
var li=$('li');
for(var i = 0;i<li.length;i++){
li[i].onclick = (function(i){
return function(){
alert(i);
}
})(i);
}
});
</script>
这样是否更好一些,或更好理解
<script type="text/javascript">
jQuery(function($){
var li=$('li');
li.bind('click',function(){
alert($('ul').find('li').index(this));
});
});
</script>
我写java就一定要写反射吗?