闭包的简单了解

<body>
    <ul>
        <li>link1</li>
        <li>link2</li>
        <li>link3</li>
        <li>link4</li>
        <li>link5</li>
        <li>link6</li>
    </ul>
</body>
<script>
    // 闭包
    // function fn(){
    //     var a = 10;
    //     a++;
    //     console.log(a)
    // }
    // fn();
    // fn();
    // fn();
    // fn();

    // function fn(){
    //     var a = 10;
    //     function fun(){
    //         a++;
    //         console.log(a)
    //     }
    //     return fun;
    // }
    // var f = fn();
    // f();
    // f();
    // f();

    // 闭包:利用作用域的嵌套,将原本的局部变量,进化成自由(私有)变量的环境

    // 闭包的原理:
    //     局部作用域,局部变量的生命周期,朝生暮死
    //     利用作用域的嵌套,触发计算机的垃圾回收机制,将原本要删除的变量,暂时保存起来,可以继续使用

    // 垃圾回收机制:将要删除的数据,先暂时存放在一个临时空间内,不立即删除,如果需要再次使用,可以直接找到该数据,继续使用,直到真正不用了,再被删除
    
    // 闭包的应用:
    //     循环中的异步
            // var ali = document.querySelectorAll("li");
            // for(var i=0;i<ali.length;i++){
            //     (function(index){
            //         ali[index].onclick = function(){
            //             console.log(index);
            //         }
            //     })(i)
            // }

            // for(var i=0;i<ali.length;i++){
            //     ali[i].onclick = (function(index){
            //         return function(){
            //             console.log(index);
            //         }
            //     })(i);
            // }

            // for(let i=0;i<ali.length;i++){
            //     ali[i].onclick = function(){
            //         console.log(i);
            //     }
            // }
    //     计时器的回调函数的传参
            // setTimeout(fn("hahahah"),5000);
            // function fn(str){
            //     return function(){
            //         console.log(str);
            //     }
            // }

            // 事件委托的封装

    //     在外部重复操作函数内部的变量
            // function fn(){
            //     var a = 10;
            //     return function(){
            //         console.log(a++)
            //     }
            // }
            // var f = fn();
            // f();
            // f();
            // f();

    // 闭包的特点:
    //     可以将要删除的数据,保存起来,继续使用,方便
    //     可以在函数外部操作内部的数据

    //     因为要删除的数据,没有被删除,继续存起来,那么占内存,耗性能
    //     在外部有可能改变内部的数据

    //     闭包就是将作用域内部和外部连接起来的桥梁

</script>

猜你喜欢

转载自www.cnblogs.com/cxyuan/p/11563205.html