JavaScript閉包函數&箭頭函數調用與執行



一、標准的閉包函數
//一、標准的閉包函數
function A() {
    var i=0;
    ++i;
    console.log('i : ' + i);
    return function b() {
        return function c() {
            return ++i
        }
    }
}

var a = A(); // 初始化A,執行A內的非function語句 ‘ i=0; ++i‘,輸出 I : 1
console.log(a()); // 執行function b,輸出 [Function: c]
console.log(a()());  // 執行function b后執行 function c,輸出 2

 

// 將++i放入function b中
function A() {
    var i=0;
    return function b() {
        ++i; console.log('i : ' + i); return function c() {
            return ++i
        }
    }
}

var a = A();  // 執行i=0 沒有輸出
console.log(a()); // 執行function b,輸出 i : 1 [Function: c]
console.log(a()()); // 執行function b后,再執行function c, 輸出 i : 2  3

 

二、箭頭函數閉包函數

//箭頭函數的閉包函數
var Add = (i = 0) => {
    ++i;
    console.log('I : ' + i);
    return (() => {
        return (() => ( ++i))
    })
};

var v = Add();  // 會執行方法內的非function語句  輸出I : 1
console.log(v()()); // 第一個括號進入第一個箭頭函數,第二個括號進入第二個箭頭函數 輸出 2
console.log(v()()); // 輸出 3

 

//將++i放入第一個箭頭函數中
var Add = (i = 0) => {
    return (() => {
        ++i; console.log('I : ' + i); return (() => ( ++i))
    })
};

var v = Add();  //會執行方法內除箭頭函數的代碼,初始化i=0
console.log(v()); //第一個括號進入第一個箭頭函數,++i執行一次,所以執行完成i的值為1  輸出 I : 1 [Function]
console.log(v()()); //兩個箭頭函數都會執行,++i執行兩次,所以執行完成i的值為3  輸出:I : 2  3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM