2.内部函数引用了外部函数的局部变量
PS:正常情况下,当一个函数调用完之后,内存中关于函数的东西会全部释放掉,局部变量也会消失,而闭包是一种特殊的存在。由于外部函数返回的是内部函数的引用,相当于你返回了一个函数,这个函数还未被真正调用。但是内函数又使用了外函数的变量,导致内存不能释放它们,需要等到内函数使用完成之后才能释放它们----由此形成了闭包
3.闭包 是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量
**2.1
简单例子1**
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
怎么来理解这句话呢?请看下面的代码。
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
在这段代码中,result实际上就是闭包f2函数。它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除。
这段代码中另一个值得注意的地方,就是“nAdd=function(){n+=1}”这一行,首先在nAdd前面没有使用var关键字,因此 nAdd是一个全局变量。
闭包简单例子2
概念: 闭包只能取得外部函数中任何变量的最后一个值.
function create() {
let res = []
for (var i = 0; i < 5; i++) {
res[i] = function() {
return i
}