美文网首页
函数闭包

函数闭包

作者: 云淡风轻_301b | 来源:发表于2017-10-20 20:56 被阅读0次

1.定义:函数内部的函数形成闭包

2.作用:一个是读取函数中的变量,另外一个是将函数中的变量存储于内存中
3.弊端:闭包会导致函数运行结束后局部变量的空间不会被释放从而造成内存泄漏

注意:
(1)闭包里面使用局部变量和函数传参的时候,用的就是外部函数的局部变量
(2)函数只是在被调用的时候会占用一定的内存空间,所有在函数内部定义的变量,都在函数申请的这块空间内暂存,函数运行完毕,空间就被系统收回

4.函数执行次数和闭包:函数调用的次数越多,占用内存越多,结合闭包以后就会造成内存泄漏

例:函数执行两次,保存的a不相同

function fn(){
      var  a = 10;
      return  function(){
               console.log(++a);           
      }
}
 var f1 = fn();//f1调用,申请空间保存a,此时a是10,再次调用f1,a变成11,a++
 var f2 =fn();//f2调用,再次申请空间保存a,a开始还是10,再次调用f2时,a才会在此基础上增加
  f1();//11
  f1();//12
  f1();//13
  f1();//14
  f2();//11

例:函数执行一次,返回两个值,产生的a是同一个
   function fn(){
      var a =10;
      function in1(){
         console.log(++a);
      }
      function in2(){
         console.log(++a);
      }
         return [in1,in2]
 }
  var arr =fn(); //fn只调用一次
  var f1=arr[0]; //f1保存in1这个函数
  var f2=arr[1]; //f2保存in2这个函数
  f1(); //11
  f1();//12
  f1();//13
  f1();//14
  f1();//15
  f2()
  1. 注意:
    (1)函数传参闭包的运用等同于在外部函数内定义一个变量

    function fn(num){
    return function(){
        console.log(++num);
    }
    }
    var f1 = fn(10);
    var f2 = fn(10);
    f1(); // 11 
    f1(); // 12 
    f1(); // 13
    f1(); // 14
    f1(); // 15
    f2(); // 16
    

(2)如果使用的是全局变量

var i =1;
function fn(){
    return  function(){
          console.log(i++);
    }
}
var f1 =fn();
var f2=fn();
f1(); //2
f1(); //3
f1(); //4
f1(); //5
f1(); //6
f2(); //7  
// 由于i是全局变量,所以自始至终函数都是同一个i

闭包实例:点击div打印对应的下标,闭包实现
原理:自执行函数里面的点击方法会形成闭包,随着for循环运行10次,函数也会运行10次,每次tt运行的时候,会有一个和变量a,然后每一个闭包保存了函数t运行时候的变量a

for(var i=0;i<items.length;i++){     
      (function(){
          var a =i;
          items[i].click=function(){
              console.log(a)
          }

      })()

}

等同于:

for(var i=0;i<items.length;i++){
      (function(a){
          var a =i;
          items[i].click=function(){
          console.log(a)
         }
      })(i);

}

相关文章

  • 如何理解闭包?

    1、定义: 嵌套在函数作用域中的函数,称为闭包函数。该作用域称为闭包环境。通过闭包函数可以访问闭包函数所在函数作用...

  • 关于逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包非逃逸闭包当函数执行过程中,执行的函数内部的闭包,...

  • 3.逃逸闭包,非逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包非逃逸闭包:当函数执行过程中,执行的函数内部的闭包...

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • day14-函数(3)装饰器

    一、闭包函数 闭包函数=函数嵌套定义+函数对象+名称空间与作用域 闭包函数 1、闭:指的是该函数是定义在一个函数内...

  • 面试题(day-2)

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,...

  • JS的闭包

    1.闭包的概念 闭包函数:声明在一个函数中的函数,叫做闭包函数。闭包:内部函数总是可以访问其所在的外部函数中声明的...

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • 2018-07-10swift4与swift 3.3 语法重拾(

    函数与闭包 闭包

  • 闭包和立即执行函数

    闭包闭包:内部的函数引用了外部的函数的变量,则产生闭包。闭包的作用:把变量封装在函数中,只有内部函数可以用,让函数...

网友评论

      本文标题:函数闭包

      本文链接:https://www.haomeiwen.com/subject/rpfmuxtx.html