闭包简介
闭包简介:
当两个函数彼此嵌套时
内部的函数就是闭包
闭包形成条件说明
闭包形成条件:
内部函数需要通过外部函数 return 给返回出来
如下所示:
function test1(){ // 外部函数
var num = 0; // 局部变量
function test2(){ // 内部函数
num++;
return num;
}
return test2;
}
var fun = test1(); // 返回函数 test2
上述代码构成一个闭包
其实就是函数test2
闭包功能
我们都知道在JS中,当一个对象不再被引用则这个对象就会被GC回收
否则这个对象会一直保存在内存中。
function test1(){ // 外部函数
var num = 0; // 局部变量
function test2(){ // 内部函数
num++;
return num;
}
return test2;
}
var fun = test1();
fun(); // 输出:1
fun(); // 输出:2
fun(); // 输出:3
fun(); // 输出:4
num 是外部函数test1()中一个变量
但值在内部函数test2()中被修改
函数test2() 每运行一次就会将 num 加 1
根据闭包的特点,函数 test1()中变量num会一直保存在内存中
闭包的应用场景
当我们需要在一些函数中定义变量,并希望变量常驻内存中
同时也不影响外部的全局变量,此时我们就可以使用闭包
闭包高级用法
日常开发中闭包常与匿名函数结合使用
var funTest1 = (function(){
var num = 0;
return function(){
num++;
return num;
}
})();
console.log(funTest1()); // 输出:1
console.log(funTest1()); // 输出:2
console.log(funTest1()); // 输出:3
创建多个闭包函数
function funTest1(i){
function funTest2(){
console.log('数字:' + i);
}
return funTest2;
};
var fa = funTest1(990);
var fb = funTest1(991);
var fc = funTest1(992);
fa(); // 输出:数字:990
fb(); // 输出:数字:991
fc(); // 输出:数字:992