闭包简介
闭包简介: 当两个函数彼此嵌套时 内部的函数就是闭包
闭包形成条件说明
闭包形成条件: 内部函数需要通过外部函数 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