其他分享
首页 > 其他分享> > 闭包函数详解

闭包函数详解

作者:互联网

什么实闭包?

在JiavaScript中,根据词法作用域的规则,内部函数总是可以访问其外部函数中声明的变量,当通过调用一个外部函数返回一个内部函数后,即使外部函数已经执行结束了,但是内部函数引用外部函数的变量依然保存在内存中,我们就把这些变量的集合叫做闭包。比如外部函数是 foo,那么这些变量的集合就称为 foo 函数的闭包。

让我们看如下的代码:

function foo() {
   let myName = "父函数内部的变量"
   function innerBar() {
      console.log(myName);
   }
   return innerBar
}
let bar = foo()
bar()

当执行子元素的函数时,使用父函数中声明的变量就会形成闭包,浏览器调试工具就可以检测闭包:

 如上图所示:

    Local 就是外层函数(foo)的作用域,

    Closure(foo) 是指 foo 函数的闭包,

    Global 就是指的全局作用域。

Local  -->  Closure(foo)  -->  Global   就是一个完整的作用域  

闭包的特点:

一般函数执行完了,会从执行栈中弹出去,并且销毁内部变量,但是因为内部函数使用了这个变量,会形成闭包,并把Closure(foo) 对象存在堆中,也就是说,闭包会占用内存,大量使用闭包对性能不好。

标签:闭包,Closure,函数,作用域,详解,foo,变量
来源: https://blog.csdn.net/weixin_57322537/article/details/120580546