JavaScript之闭包closure

1.什么是闭包

字面理解:闭:关闭,封闭的意思,对外界不开放的。包:包装起来,包裹起来
我们都知道内层的作用域可以访问外层的作用域,但是反过来不行,但是有的时候,我们确实需要访问一个封闭空间中的数据,闭包就是这样一种间接访问封闭空间中私有数据的技术.下面是一个简单的例子

function func1(){
          var b=100;
          return function () {
              return b;
          }
      }
var res=func1()();
console.log(res);-->100
/*我们在函数func1外部无法直接访问局部变量b,
但在func1内部的方法却可以访问并返回同级的变量b。
func1()一个括号代表func1内返回的函数本身,
func1()()再加一个括号代表调用这个函数。*/

闭包还有另外一种形式简单说一下:

    (function(a,b){
     console.log( a+b);
    })(1,2);/*第一个括号表示函数的定义,第二个括号表示
    函数的调用,这里相当于一个立即执行函数。*/

2.用闭包设置或读取数据

注意:用闭包只能获取值,但是却不能修改值,看下面的代码

function foo(){
        var name = "zs";
        return {//与前面不同这里返回的是一个对象
            getName:function(){//获取属性
                return name;
            },
            setName:function(nameValue){//设置属性
                name = nameValue;
            },
        }
    }
    var func = foo();
    console.log(func.getName());-->zs
    func.setName("张校长");
    console.log(func.getName());-->张校长

3.闭包的作用

01 创建一个私有的空间,保护数据,外界如果需要访问数据必须通过函数提供的指定方法。
02在这些指定的方法中,我们可以设置一些校验的逻辑,以保证对数据访问和设置的安全性。
03 闭包可以延长变量的生命周期,这里可能有些不太好理解,普通的局部变量,在函数调用完成后被销毁,但是使用闭包后,因为每次调用外层函数都会返回内部局部变量,也就是这个引用必须一直存在,所以变量不会被销毁。
闭包会占用大量内存,所以我们使用的时候要慎重。

4.闭包的应用 ##

定时器应用,div事件应用…待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值