美文网首页
什么是闭包?闭包的优缺点?

什么是闭包?闭包的优缺点?

作者: 是周大侠啊 | 来源:发表于2022-02-17 16:22 被阅读0次

想要理解闭包,首先要知道变量作用域的概念。

  1. 变量作用域
    变量的作用域有两种:全局变量和局部变量。
    JS语言定义了:函数内部可以直接读取全局变量,但是函数外部无法读取函数内部的局部变量。
    注意点:
    大家都知道,变量是需要用var关键字声明的。但是javascript中也可以隐式的使用变量,就是不用声明,直接使用。而且,千万注意,javascript把隐式声明的变量总是当成全局变量来使用的。
    没有var,let声明的变量或者在函数外部声明的变量都是全局变量;使用 var 声明的变量属于所在函数,不管在函数的哪个位置出现,等价于在函数一开始声明。该变量为局部变量,局部变量比同名全局变量的优先级高。

  2. 如何从外部读到函数内部的局部变量?
    某些情况下,需要从外部获取函数内部的局部变量,但是上面已经提到,正常情况下,是不允许访问的,需要通过一定的方法才能实现
    那就是,在函数内部,在定义一个函数

function goPlat(){
  var t=888;//局部变量
  function showNumber(){
  console.log(t);
    }
  return showNumber
}  
this.result=goPlat();
this.result();//888

在上面的代码中,函数goPlat内部的变量对函数showNumber都是可见的
反之,函数showNumber里面的变量对函数goPlat就是不可见的
这就是JS中的链式作用域结构,子对象会向上一级一级寻找父对象的变量
所以父对象的变量对于子对象来说都是可见的
所以,竟然函数showNumber可以读取函数goPlat里面的t,那么把函数showNumber作为返回值,不就可以在外部访问局部变量t了。

  1. 闭包的概念
    在上面的代码中,函数showNumber就是一个闭包,闭包就是能够读取其他函数内部变量的函数。
    由于在JS中,只有函数内部的子函数才能读取局部变量,所以闭包也可以理解为:定义在一个函数内部的函数。
    所以本质上:闭包是连接函数内部和函数外部的桥梁。

  2. 闭包的用途
    闭包最大的两个用途:使得外部能够访问函数内部的变量;第二个就是让这些变量的值始终保存在内存中,不会在goPlat()调用后被清除。

  3. 使用闭包的注意点
    由于闭包会使得函数内部的变量保存在内存中,内存消耗很大,不能滥用闭包,否则会引起网页性能问题,在IE中导致内存泄漏,解决方法时:在退出函数之前,将不使用的局部变量删除。
    闭包会在父函数外部改变父函数内部局部变量的值,所以如果你把父函数当做对象使用,把闭包当成公共的方法,把内部变量当成私有属性,这时一定要小心,不要随意改变父函数内部变量的值。

相关文章

  • 2018-01-29

    什么是闭包?闭包的优缺点? 闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要...

  • 什么是闭包,闭包的优缺点

    闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。 1、变量作...

  • 什么是闭包?闭包的优缺点?

    闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。 1、变量作...

  • 什么是闭包?闭包的优缺点?

    1、什么是闭包? 闭包是指有权访问另外一个函数作用域中的变量的函数。可以理解为(能够读取另一个函数作用域的变量的函...

  • 什么是闭包?闭包的优缺点?

    闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。 1、变量作...

  • 题目

    闭包是什么?闭包的优缺点 this的指向问题? js中的基本类型? (没有object!) typeof 判断类型...

  • 什么是JavaScript闭包?闭包的优缺点?

    闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。 1、变量作...

  • python函数部分

    什么是闭包,闭包的常用用法,怎样判断是不是闭包,闭包的作用是 1、什么是闭包 2、常用用法 3、判断是不是闭包 4...

  • 前端常见问题总结

    什么是闭包?闭包的用途是什么?闭包的缺点是什么? 什么是闭包 闭包:内部函数总是可以访问其所在的外部函数中声明的参...

  • 前端面试必掌握问题@令狐张豪

    什么是闭包,优缺点? 闭包实际上就是一个嵌套函数,在一个函数内定义的一个函数。作为闭包的必要条件,内部函数应该访问...

网友评论

      本文标题:什么是闭包?闭包的优缺点?

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