闭包函数详解
作者:互联网
什么实闭包?
在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