<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script type="text/javascript">
var aLi = document.getElementsByTagName("li");
/*for(let i = 0; i < aLi.length; i++){
aLi[i].onclick = function(){
console.log(i);
}
}*/
/*for(var i = 0; i < aLi.length; i++){
aLi[i].index = i;
aLi[i].onclick = function(){
console.log(this.index);
}
}*/
/*for(var i = 0; i < aLi.length; i++){
aLi[i].onclick = (function(i){
return function(){
console.log(i);
}
})(i)
}*/
/*for(var i = 0; i < aLi.length; i++){
(function(a){
aLi[a].onclick =function(){
console.log(a);
}
})(i)
}*/
</script>
</body>
</html>
上述简单的案例是为了实现点击每个li返回相对的索引。
后两种方法就利用了闭包保存了i每次的索引,当然上述的ES6中的let声明变量和保存索引值也可以解决这个问题。