JavaScript

JS闭包原理及功能

下文笔者讲述JavaScript中闭包原理及功能简介说明,如下所示

闭包简介

闭包简介:
   当两个函数彼此嵌套时
    内部的函数就是闭包 

闭包形成条件说明

 
闭包形成条件:
   内部函数需要通过外部函数 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