首页 > 其他分享 >5.闭包的实现原理和作用,可以列举几个开发中闭包的实际应用

5.闭包的实现原理和作用,可以列举几个开发中闭包的实际应用

时间:2023-03-04 15:22:34浏览次数:34  
标签:闭包 内部 中闭 内存 列举 setTimeout 变量 函数

1.闭包的实现原理和作用

闭包:指有权访问另一个函数作用域中的变量的函数,一般都是一个函数包含另一个函数。

2.闭包的作用:

访问函数内部变量、保持函数在环境中一直存在,不会被垃圾回收机制处理。

因为函数内部声明 的变量是局部的,只能在函数内部访问到,但是函数外部的变量是对函数内部可见的,这就是作用域链的特点了。

子级可以向父级查找变量,逐级查找,找到为止

因此我们可以在函数内部再创建一个函数,这样对内部的函数来说,外层函数的变量都是可见的,然后我们就可以访问到他的变量了。

 

3.闭包的优点

  • 方便调用上下文中声明的局部变量
  • 逻辑紧密,可以在一个函数中再创建个函数,避免了传参的问题

4.闭包的缺点

主要就是使用闭包,可以是函数在执行完不被销毁,保留在内存中,如果大量使用闭包就会造成内存泄露,内存消耗很大

5.闭包在实际中的应用

 function addFn(a,b){
        return(function(){
            console.log(a+"+"+b);
        })
    }
    var test =addFn(a,b);
    setTimeout(test,3000);

一般setTimeout的第一个参数是个函数,但是不能传值。如果想传值进去,可以调用一个函数返回一个内部函数的调用,将内部函数的调用传给setTimeout。内部函数执行所需的参数,外部函数传给他,在setTimeout函数中也可以访问到外部函数。

 

6.常见的内存泄漏

  • 全局变量引起的内存泄露
  • 闭包
  • 没有被清楚的定时器

7.闭包的经典应用场景

  • 返回值
  • 函数赋值
  • 函数参数
  • 循环赋值
  • 迭代器
  • 缓存(求和操作)

标签:闭包,内部,中闭,内存,列举,setTimeout,变量,函数
From: https://www.cnblogs.com/alwaysrun/p/17178367.html

相关文章

  • go的闭包捕获变量
    packagemainimport( "fmt")funcA()int{ variint deferfunc(){ i++ fmt.Println("deferfuncA",i) }() fmt.Println("funcA",i) returni}func......
  • 深入变量和闭包
    加var变量和不加var变量的区别加var的变量都会提升,不管代码执行与否,不加var的变量预编译阶段不会提升原型链和作用域链window.a//不会报错返回undefined......
  • 函数对象与闭包
    一、函数对象函数对象指的是函数可以被当做’数据’来处理,函数名不加括号就是指函数的内存地址函数名加括号,就是调用函数,找到函数体代码并执行,不论在哪个位置defindex......
  • JavaScript 闭包
    JavaScript 闭包JavaScript变量可以是局部变量或全局变量。私有变量可以用到闭包。全局变量函数可以访问由函数内部定义的变量,如:实例functionmyFunction(){......
  • global与nonlocal关键字、函数名的多种用法、函数的嵌套调用、函数的嵌套定义、闭包函
    目录一、global与nonlocal关键字二、函数名的多种用法三、函数的嵌套调用四、函数的嵌套定义五、闭包函数六、装饰器简介一、global与nonlocal关键字global方法:用于局部......
  • java面试题-列举常见的异常
    面试中经常会被问到,列举几种常见异常。怎么能被这个难倒呢?下面随便列举些,以及触发例子。文章目录​​NullPointerException​​​​ArithmeticException​​​​NumberFor......
  • Nmap列举远程机器上开放的端口
    一、Nmap扫描原理示意图:如果发现主机存活,nmap就会继续发送其他类型的数据包,通过分析远程机器上返回的数据包来得到相关信息;如果不存活就停止扫描二、使用Zenmap扫描......
  • 深度剖析JavaScript闭包及其原理,有哪些优缺点?
    JavaScript闭包JavaScript中的闭包(closure)是定义在函数内部的一种特殊作用域。它能够让函数访问其他函数中局部变量,即使当前函数不是以该变量为参数传递的,也可以保存其词......
  • 可变类型和不可变类型、闭包函数、装饰器+语法糖
    可变类型和不可变类型:  闭包函数:  装饰器+语法糖:   ......
  • 3.5 闭包
     3.5.1闭包的基本技能点闭包的定义:闭包就是一段代码块,用{}括起来:defc={println'higroovy'} **闭包调用/执行:c.call()c()//类似调用方法一样 闭包传入参数:**无参......