首页 > 其他 > 详细

闭包1

时间:2019-10-22 12:49:48      阅读:102      评论:0      收藏:0      [点我收藏+]
<body>
  <!--
    1。如何产生闭包?
      *当一个嵌套的内部(子)函数引用嵌套的外部(父)函数的变量(函数)时,就产生了闭包
    2.闭包到底是什么?
      使用chrome调试查看
      理解一:闭包是嵌套的内部函数(绝大部分人)
      理解二:包含被引用变量(函数)的对象(极少数人)
      注意:闭包存在于嵌套的内部函数中
    3.产生闭包的条件?
      函数嵌套
      内部函数引用了外部函数的数据(变量/函数)



  -->


  <script>
  
    function fn1(){
      var a =2
      var b = 22//闭包里面没有b
    如果是var fn = function(){ //这样就不产生闭包
      console.log(a)
      }
function fn2(){ //执行函数定义才能产生闭包(有函数提升),也就是一定要执行外部函数,执行了函数定义才会产生变量,不一定要执行内部函数(fn2) console.log(a) //闭包里面有a } fn2() } fn1() </script> </body>
执行函数定义才能产生闭包,也就是一定要执行外部函数,执行了函数定义才会产生变量,不一定要执行内部函数(fn2)

常见的闭包
<body>
  <!--

    1.将函数作为另一个函数的返回值
    2.将函数作为实参传递给另一个函数调用

  -->
  <script>
    //1.将函数作为另一个函数的返回值
    function fn1(){
      var a = 2
      function fn2(){
        a++;
        console.log(a)
      }
      return fn2
    }
    var f = fn1()  //闭包产生了
    f() //3     f是调用内部函数,不是外部函数
    f() //4
    //请问整个过程中创建几个内部函数对象?一个!!!  内部函数是执行函数,并不是创建函数
  
  //看闭包对象创建几个,就看你外部函数对象执行几次,因为创建外部函数对象,才会去创建内部函数对象,和内部函数执行几次没有关系,也就是和f()执行几次没有关系。因为执行外部函数时,执行了内部的函数定义,产生了变量。
    
   
//2.将函数作为实参传递给另一个函数调用

    function showDelay(msg,time){
      setTimeout(function(){
        alert(msg)
      },time)
    }
    showDelay(fds,2000)

    //内部函数function(){alert(msg)}闭包里面有msg,如果没有msg,就没有闭包


  </script>
  
</body>

闭包对象创建几个,就看你外部函数对象执行几次,因为创建外部函数对象,才会去创建内部函数对象,和内部函数执行几次没有关系,也就是和f()执行几次没有关系。因为执行外部函数时,执行了内部的函数定义,产生了变量。
 

闭包1

原文:https://www.cnblogs.com/lucy-xyy/p/11718731.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!