03JavaScript面试系列_闭包
说明,如果闭包概念理解不透可以
查看文档:JavaScript系列_彻底理解闭包,如何彻底理解闭包,javascript中的闭包如何理解
面试题:
下面这个ul,如何点击每一列的时候alert其index?(闭包)
<ul id=”test”>
<li>这是第一条</li>
<li>这是第二条</li>
<li>这是第三条</li>
</ul>
解答:
1. let lis=document.getElementById("test").children;
2. for(var i=0;i<lis.length;i++){
3. lis[i].onclick=(function(num){
4. return function(){
5. alert(num);
6. }
7. })(i);
8. }
解读:
以上代码虽然不多,但需要仔细分析,还是有点绕。
第一行let lis=document.getElementById("test").children;没啥说的
第二行:for(var i=0;i<lis.length;i++){也没有啥说的
第三行到第七行是重点:
第三行是给每个li的onclick事件赋值为一个函数:在onclick属性的赋值号右边是一个自运行函数,所以,给onclick属性赋值的是自运行函数的返回值,但是自运行函数的返回值是一个函数,所以,给onclick属性赋的值依然是个函数。这么绕一下的目的就是在每次赋值时能够把i的当前值传到函数内部。
如果这个题没有理解的话,请看闭包文章:JavaScript系列_彻底理解闭包,如何彻底理解闭包,javascript中的闭包如何理解