zoukankan      html  css  js  c++  java
  • 闭包

    1. 函数作为返回值

     function fn(){
            var max = 10;
            return function f1(x){
                if(x > max){
                    console.log(x);
                }
            }
        }
        var f2  = fn();//调用fn函数,并把返回值存放在f1中
        console.log(f2);// function f1(x){if(x > max){console.log(x);}}
        f2(22);//调用f2,相当于调用f1

    局部变量在函数执行完成之后未被销毁

    2. 函数作为参数被传递

     var max = 10;//全局作用域
           function f1(x){
             if(x > max){ //此处max是全局作用域里的max,在该函数声明时就已经确定
                 console.log(x);//11
                 console.log("全局的max:" + max);//10
                }
             }
            (function fn(f){//匿名函数
              var max = 100;//该处的max是局部变量,在fn作用域内使用.
                f(11);
                 console.log("fn里的max:" + max);
             })(f1);

    自由变量在函数声明时已经确定了其作用域

    3.闭包的运用

    *循环闭包

    <ul id = "ul">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
        </ul>
        <ul>
            <li>11</li>
            <li>12</li>
            <li>13</li>
        </ul>
        var lis = document.getElementById("ul").getElementsByTagName("li");
        for(var i  = 1;i < lis.length;i++){
            (function(i){
                lis[i].onclick = function(){
                    console.log(i);
                }
            })(i);
        }

    *封装闭包

    4.闭包的优缺点

    *优点:比较灵活,利于封装

    *缺点:会造成空间浪费,消耗性能

  • 相关阅读:
    Android三角标签View:TriangleLabelView
    HTML5坦克大战1
    HTML5坦克大战
    html5制作坦克大战
    HTML学习
    HashMap
    数据库中的事务
    路由器外网访问内网
    java反射(二)
    java集合(二)
  • 原文地址:https://www.cnblogs.com/sapho/p/4822982.html
Copyright © 2011-2022 走看看