JS

1. 闭包变量

先看程序

for(var index = 0 ; index<10;index++){
        var li = document.createElement("li");
        li.onclick = function(){
            console.log(index);
        };
        ul.appendChild(li);
    }

初学者可能会认为生成后的li,点击时候,console.log出来的值是和index一样.

但是实际上console.log出来的都是10

为什么,因为在用户点击的li的时候,这个for循环早已结束,index与for形成了一个闭包,因为onclick函数长期有效,导致for循环并没有被回收,但for循环已结束,所以index一直是10.

如何解决

 for(var index = 0 ; index<header_children_length;index++){
        var li = document.createElement("li");
        li.innerText = header_children[index].innerText;
        li.onclick = (function(index){
            return function (){
                console.log(index);
            }
        })(index);
        ul.appendChild(li);
    }

这里没有直接把匿名函数赋给onclick,而是通过一个直接执行的函数把参数传给匿名函数.

© 404mzk all right reserved,powered by Gitbookhttp://blog.404mzk.com 该文件修订时间: 2016-12-12 22:55:35

results matching ""

    No results matching ""