JS中闭包的概念
概要:Js中闭包的概念...
个人理解:
js中闭包的定义💬:
一个函数及其对外部某几个参数的引用,形成的一个整体,可以称之为闭包。
例如:
()(var a = 1, b=2;
function foo() {
return a+b;
})
//明显函数foo引用了foo函数外部的两个变量,这个函数和其引用的变量(环境)形成一个整体
//这样一个整体可以称之为闭包
我之前在学习闭包的时候所参照的一些返回函数和内嵌函数的例子,那么这里也简单做个例子:
var a = "全局变量";
function foo1() {
var a = "局部变量"
function foo2() {
console.log(a);
}
return foo2();
}
foo1();//打印“局部变量”
//foo2函数和局部变量a参数形成了闭包
//foo1函数实际执行return的foo2函数,foo2与局部变量a形成闭包,所以打印的是局部变量而不是全局变量
那么为什么要这样使用闭包呢❓?
原因是避免全局变量的影响。在es6的let、const新关键字出现之前,javascript只有函数作用域的概念而没有块作用域的概念。使用局部变量则需要函数内部定义,而如何访问到函数内部定义的局部变量,这就是闭包的作用。
闭包的作用😎:
1、通过闭包可以访问局部变量
2、可以是局部变量驻留内存中,避免使用全局变量
闭包的缺陷😐:
由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更多的内存;所以过度使用闭包会导致性能下降。