闭包

闭包是JavaScript中函数的一种高级应用方式,利用函数的嵌套,实现将第一层函数中的局部变量,可以在第一层函数外部修改的过程,叫闭包。在编程中我们经常会使用到闭包。

  • 闭包的形成环境:
    1.函数的嵌套;
    2.内部函数使用外部函数中的变量;
    3.将内部函数返回,在外部函数的外部,接收返回值,执行(相当于执行了内部函数);

  • 闭包的特点
    1.解决掉所有的全局变量,节省内存空间
    2.可以在函数外部,修改函数内部的变量(外部修改内部,安全么?)
    3.相对于局部变量来说,浪费了内存

  • 闭包的代码展示

    function box(){
        var a = 20;
        function fn(){  //函数的嵌套
            a++;
            console.log(a);
        }
        return fn; //将fn返回
    }
    // 将返回出来的函数fn用一个变量保存,a的值没有重新声明
    var f = box(); //调用函数box,执行结果为函数fn
    f();  //21
    f();  //22
  • 闭包的应用场景
    1.循环中的事件,事件处理函数中使用了循环的每次的计数器
    html代码
   <ul class="list">
        <li>link1</li>
        <li>link2</li>
        <li>link3</li>
        <li>link4</li>
        <li>link5</li>
    </ul>

js代码:

  var ali = document.querySelectorAll(".list li"); //选择元素
  for(var i=0;i<ali.length;i++){  //本来每个li点击的时候拿不到其对应的索引,但是闭包可以
      (function(index){
          ali[index].onclick = function(){
                console.log(index);
          }
       })(i);
   }

2.给某些系统默认的回调函数,传参
举例:给计时器的回调函数,传参
js代码如下:

    function fn(a){
       return function(){
            console.log(a);
       };
     }
    setTimeout(fn("world"), 1000);

3.处理掉全局变量,只要开启新文件,新功能,最好上手就是一个匿名函数,简易闭包。
js代码如下:

	var f = (function(){
	    var a = "hello";
	    function fn(){
	       console.log(a + "world");
	    }
	    return fn;
	})();
	f();

以上就是我对闭包的理解,如有错误还请多多包含。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值