谈谈我对闭包知识的深刻理解

在javascript中闭包应该是最难理解的一部分内容。在我看来闭包就是和作用域之间的联系。

1、首先我们来了解一下javascript中的作用域知识。

javascript中的作用域其实就指的函数作用域,因为只有函数在javascript中才能形成区域范围。而函数作用域有一下特点。

1.1 函数能访问到外部的变量。案例一:

   var num = 123;
     function fn() {
        console.log(num);//输出的值为123
     }
     fn();  

1.2 函数内的变量不能被外部访问到。案例二:

  function fn(){
  var num=123;
 }
  console.log(num)//输出值:num is not undefined说明函数内部的变量是不能被外边访问的。

2、下面就该说闭包了

从上面案例二我可以知道函数会形成一个封闭的区域,对其中的变量起到保护作用,使函数外边无法访问。

闭包:从字面意思来理解就是封闭和包裹,换句话说,就是在函数内部定义的变量,在函数的外部无法访问到,因此就说函数构成了一个闭包。

说白了闭包是作用域的应用。

计算机科学中对闭包的定义为:一个函数的函数体以及函数所处的环境,构成的一个综合体叫做:闭包

函数体:就是函数内部的代码。

函数所处的环境:指的就是作用域。

是不是觉得计算机科学中对闭包的定义是不是很难理解。

3、使用闭包来解决什么样的问题?

我使用闭包来解决如何访问函数内部变量的问题。 下面我写个史上最简单的闭包。

  function foo() {
        var num = 123;

        function fn() {
            return num;//
        }
        return fn;
    }
    var m=foo();
    var f=m();
    console.log(f);//输出的值为123,这样就可以访问到函数内部变量num。

      原理就是利用闭包:在函数foo中嵌套了一个函数fn,利用函数fn可以访问到其外部的变量,而获取函数foo中的变量num,当外部调用函数foo()时候,
      函数foo中 return返回fn函数的实体,然后我再对函数fn进行调用就在外部访问到函数内部变量num了。就是利用内部函数的闭包特性把函数foo中的变量取到外边,
      说白了内部函数就相当于一个媒介,就是一个桥梁连接函数内部和外部。这就是闭包作用。

转载于:https://www.cnblogs.com/lsy0403/p/5854683.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值