閉包的使用

思路: 先定義一個空的數組,for循環遍歷數組,把數組裏面的元素push到空的數組中,因爲返回的是回調函數,i值需要傳遞進去,函數裏面返回一個函數,再返回函數的元素,最後把定義的數組返回出去;

1.閉包的使用(i值的傳遞)

function makeClosures(arr, fn) {
// 定義一個空的數組
    var result = [];
    for (var i = 0; i < arr.length; i++) {
    // 添加到數組中
        result.push((function(num){
        // 返回一個函數(回調函數,i值需要傳進來)
            return function(){
            // 返回其中的某一項
                return fn(arr[num])
            };
           // 傳i值進去
        })(i));
    }
    // 把數組返回出去
    return result;
}

2.用forEach方法直接返回數組的元素

function makeClosures(arr, fn) {
// 定義一個空的數組
    var result = [];
    // forEach 循環 (第一個參數是元素, 第二個參數是下標,第三個參數是原數組)
    arr.forEach(function(ele) {
        result.push(function(){
        // 返回數組中的元素
            return fn(ele);
        });
    })
    // 返回空數組
    return result;
}

3.用es6的語法

function makeClosures(arr, fn) {
// 定義一個空的數組
    var result = [];
    // let 有塊級作用域(只在大括號裏面有效)
    for (let i = 0; i < arr.length; i++) {
        result.push(function() {
        // 返回數組中的元素
            return fn(arr[i]);
        });
    }
    // 返回數組出去
    return result;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章