一、普通闭包
// 闭包:函数套函数,内部函数访问外部函数的变量|参数
function fn2(){//函数套函数
var b = 20;
function fn21(){
console.log(b++);//20 作用域链
// console.log(b);//21
}
fn21();
}
fn2();//20
fn2();//20
function fn3(d){//内部函数访问外部函数的变量|参数
var c = 30;
function fn31(){
console.log(c);
console.log(d);
}
fn31();// 30 40
}
var f3 = fn3(40);
console.log(f3);// undefined
二、经典闭包
function fn1(){
var a = 10;
return function fn11(){
console.log(a++);
}
}
var f1 = fn1();
f1();//10
f1();//11
// f1 = null;//手动释放闭包
// f1();//f1 is not a function
// 多次执行闭包之间没有关联
var f2 = fn1();
f2();//10
f2();//11
注意:闭包能够访问其他函数内部变量的函数函数套函数,延伸变量的作用范围,闭包中的变量会一直存储在内存中,大量使用闭包,可能会造成内存泄露,闭包不用的时候要释放内存 =null