闭包

本文介绍了JavaScript中闭包的概念,包括函数作为返回值和参数的使用方式,并通过具体示例展示了闭包的应用,如循环闭包和封装闭包。此外还讨论了闭包的优缺点。

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.闭包的优缺点

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

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

转载于:https://www.cnblogs.com/sapho/p/4822982.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值