<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
var li_s = document.querySelectorAll("li");
第一种方法:自定义属性
for(var i = 0 ; i < li_s.length ; i ++){
li_s[i].index = i;
li_s[i].onclick = function(){
console.log(this.index);
}
}
第二种方法:数组
for(var j = 0 ; j < li_s.length ; j ++){
li_s[j].onclick = function(){
var index = Array.from(li_s).indexOf(this);
console.log(index);
}
}
第三种方法:let
for(let i = 0 ; i < li_s.length ; i++){
li_s[i].onclick = function(){
console.log(i);
}
}
第四种方法:闭包
for (var i = 0; i < li_s.length; i++) {
li_s[i].onclick = clk(i);
}
// 命名函数
function clk(num) {
return function(){
console.log(num);
}
}
关于闭包的学习
个人觉得,所谓闭包问题就是变量缓存的问题。也就是当外部函数消亡之后,内部函数所应用到的外部函数变量还存在的问题。
而闭包,其实就是能够使得外部函数变量缓存的奇葩内部函数。
即
闭包=内部函数+变量缓存(外部函数变量缓存)
闭包概念
函数嵌套,在内嵌函数中使用到外部函数的局部变量(即内嵌函数功能的实现依赖于外部函数中的局部变量),外部函数中返回了对内嵌函数的引用(在外部函数调用结束后还可以去引用到内部函数),这种情况就是闭包。
作用:延长函数体内部局部变量的生命周期。
当在函数外部还希望能够继续调用函数内部局部变量时,可使用闭包。