0%

JavaScript闭包

需求:获取内部变量

1
2
3
4
5
6
7
8
9
function f1() {
var n = 999;
function f2() {
return n;
}
return f2;
}
var result = f1();
console.log(result()); // 999
  1. 闭包:外部获取内部局部变量,修改局部变量
  2. js特性:子函数可以拿到父函数局部变量
  • 闭包就是函数里面的函数,通过子函数可以在外部就可以拿到父函数的局部变量,拥有这个功能的子函数就叫做闭包;
  • 优点:可以在外面拿到局部变量,修改局部变量;
  • 缺点:滥用闭包导致内存溢出,不会被垃圾回收机制回收;

阮一峰的对闭包的理解

各种专业文献上的”闭包”(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。
所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。