1. 程式人生 > 實用技巧 >5.寫一個返回閉包的函式

5.寫一個返回閉包的函式

1.閉包函式是指有權訪問另一個函式作用域中的變數的函式
2.建立閉包函式最常見的方式是在一個函式內建立另一個函式,通過另一個函式訪問這個函式的區域性變數
3.閉包的特點:1函式巢狀函式,
2 函式內部可以引用外部的引數和變數
3
引數和變數不會被垃圾回收機制回收
4.閉包的優點:1 希望一個變數長期駐紮在記憶體中    *  
 2
避免全域性變數的汙染 *
       3
私有變數存在

5.閉包的實現 1:函式巢狀函式    *  
2
外層函式返回內層函式 *
3
外面有一全域性變數接受外層函式

function fun1() {
        var sum=0;
        function fun2() {
            sum++;
            return sum
        }
        return fun2
    }
    var s=fun1();
    console.log(s());

//  自執行函式  的閉包
    //
    var fun3=function () {
       var a=3;
       return{
           b:7,
           sum:function () {
               return this.b+a;
           }
       }
    }();
    console.log(fun3.sum());
/*
        *  把函式名當引數呼叫
        *  回撥函式
        *
        * */
    function b() {
        console.log("b");
    }
    function c() {
        console.log("c");
    }
    function d(fun) {
        fun();
    }
    d(b);
    d(c);
    // 迴圈
    var num=0;
    function a1(fun) {
        fun(a1);
    }
    function a2(fun) {
        num++;
        console.log(num);
        if(num>10) return;
        fun(a2);
    }
    a1(a2);
// 事件函式  也是 回撥函式
    this.addEventListener("click",clickHandler);
    function clickHandler(e) {

    }
    setInterval(animation,16);
    function animation() {

    }

返回閉包時牢記一點:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數!