首页 > 其他分享 >闭包-closure

闭包-closure

时间:2023-09-07 14:11:35浏览次数:56  
标签:闭包 closure 内部 function 嵌套 变量 函数

1.闭包 Closure:有权访问另一个函数作用域中变量的函数。包含被引用变量(函数)的对象。
2.闭包的产生:当一个嵌套的内部函数引用了外部函数的变量时,就产生了闭包。
  2-1.闭包产生的条件:
    ①函数嵌套。
    ②内部函数引用了外部函数的数据(变量/函数)。
3.常见的闭包:
  3-1.将函数作为另一个函数的返回值。注意外部函数返回的是内部函数,导致下面代码仅生成一个内部函数对象,调用了一次外部函数,生成了一个闭包。

function fn1() {
  var a = 2;
  function fn2() {
    a++;
    console.log(a);
  }
  return fn2;  
}
var f = fn1();
f(); // 3 
f(); // 4

  3-2.将函数作为实参传递给另一个函数调用。

function showDelay(msg, time) {
  setTimeout(function() {
    console.log(msg)
  }, time)
}
showDelay('aa', 2000)

 

4.闭包的作用:
  4-1.使函数内部的变量在函数执行完后,仍然存活仔内存中(延长了局部变量的生命周期)。
  4-2.让函数外部可以操作(读写)到函数内部的数据(变量/函数)。可以创建拥有私有状态的函数,使得状态被封装起来。
  4-3.传递参数的形式减少作用域查找。
5.闭包的生命周期:
  5-1.嵌套内部函数定义执行完成时就产生,而不是在调用的时候。
  5-2.在嵌套的内部函数成为垃圾对象时,即没有引用变量指向对象或函数。被引用的变量直到闭包被销毁时才会被销毁。
6.闭包的缺点:
  6-1.函数执行完之后,函数内的局部变量没有释放,占用内存时间变长。
  6-2.容易造成内存泄漏。
7.释放闭包:
  7-1.让内部函数成为垃圾对象,回收闭包。
  7-2.在退出函数之前,将不使用的局部变量全部删除。

 

标签:闭包,closure,内部,function,嵌套,变量,函数
From: https://www.cnblogs.com/Jishuyang/p/17684718.html

相关文章

  • 闭包
      ......
  • GO语言中的闭包
    GO语言中的闭包在Go语言中,闭包(Closure)是指一个函数值(函数变量)捕获并绑定了其所在的词法环境(LexicalEnvironment)。换句话说,闭包是一个函数以及其相关的引用环境的组合体。一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量(外层函数中的参数,或者外层函数中直接定......
  • 闭包之可能引起的问题
    通过使用闭包,我们可以实现许多有用的功能,提高代码的灵活性和可维护性。然而,在使用闭包时需要注意避免循环引用、内存泄漏等问题。 循环引用循环引用指的是闭包函数中捕获的变量与闭包函数本身形成了一个循环引用关系。当闭包函数捕获了外部函数的变量,并且这个变量又引用了闭......
  • 闭包之作用
    主要的作用和用途:保存状态:闭包可以用于保存函数的局部变量状态,这样在每次调用函数时,闭包内的变量都会被保留下来。这使得闭包非常适合用于实现计数器、缓存等功能。延迟执行:通过使用闭包,我们可以将某个操作延迟到稍后执行。例如,可以创建一个延迟调用的函数,该函数接受一些参......
  • 闭包之nonlocal关键字的作用
    nonlocal关键字在闭包中的作用在Python中,默认情况下,内层函数只能访问外层函数的变量,但不能修改它们。如果希望在闭包函数中修改外层函数中的变量,可以使用nonlocal关键字来声明要修改的变量。示例1#外部函数2deffunc_out(num1):3#内部函数4deffunc_inne......
  • iOS开发Swift-闭包
    1.闭包表达式语法{(参数)->return类型in//内容}letnames=["C","A","E","B","D"]funcback(_s1:String,s2:String)->Bool{returns1>s2//(B>A,C>B)}//闭包后:varreversedN......
  • js闭包
    一,闭包是什么闭包是:函数内部和函数外部连接的桥梁;可以读取其他函数内变量的函数;可以访问外部函数的变量,并将这些变量保存在内存中,供内部函数在外部函数执行完毕后继续使用;常被用于工厂函数、模块化等场景。二,闭包优缺优点:①保护函数内的变量安全,实现封装,防止变量流入其他环境发......
  • 9 JavaScript闭包
    9闭包我们都知道,函数里是可以访问函数外的全局变量,而函数外不能访问函数内的局部变量,如下://函数外定义a,在函数内可以访问vara="测试";functionfn(){console.log(a);}fn();执行结果://函数内定义a,在函数外访问不到functionfn(){vara="测试";}co......
  • Python学习 -- 高阶、闭包、回调、偏函数与装饰器探究
    Python函数作为编程的核心,涵盖了众多令人兴奋的概念,如高阶函数、闭包、回调、偏函数和装饰器。本篇博客将深入研究这些概念,结合实际案例为你解析函数的精妙,以及如何巧妙地运用它们来构建更强大、灵活的程序。高阶函数:进一步探索在上文基础上,再次回顾高阶函数,展示它们如何将函数作为......
  • Go - A Tour of Go Exercise: Fibonacci closure
    packagemainimport"fmt"//fibonacciisafunctionthatreturns//afunctionthatreturnsanint.funcfibonacci()func()int{f0,f1:=0,1returnfunc()int{f:=f0f0,f1=f1,f+f1returnf}}......