03JavaScript面试系列_闭包

说明,如果闭包概念理解不透可以

查看文档:JavaScript系列_彻底理解闭包,如何彻底理解闭包,javascript中的闭包如何理解


 面试题:

下面这个ul,如何点击每一列的时候alertindex?(闭包)

<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的当前值传到函数内部。

 03JavaScript面试系列_闭包

 

如果这个题没有理解的话,请看闭包文章:JavaScript系列_彻底理解闭包,如何彻底理解闭包,javascript中的闭包如何理解