2017-09-22 60 views
0

我正在研究回調概念,並且經常看到一個用作「函數調用」的f參數:callback(arr [i]),但它還不是函數。我想我們預計其中一個參數是一個函數,所以這是一個可接受的方法?保存參數的解釋函數的參數

編號:

function processArray(arr, callback) { 
    var resultArr = new Array(); 
    for (var i = arr.length - 1; i >= 0; i--) 
     resultArr[i] = callback(arr[i]); 
    return resultArr; 
} 
+0

這就是**回調**。這是一個需要保存一個函數的參數,以便您可以調用它。 – Barmar

+0

你的意思是「它還沒有功能」? – Barmar

回答

2

看。如果你要處理的陣列中的每個項目,並獲得其中包含字符串表示的length新的數組,你可以做

function processArray(arr, callback) { 
 

 
    if(typeof callback !== 'function') { 
 
     throw new Error('The callback is not a function'); 
 
    } 
 

 
    const resultArr = new Array(); 
 
    
 
    for (var i = arr.length - 1; i >= 0; i--) { 
 
     resultArr[i] = callback(arr[i]); 
 
    } 
 
    
 
    return resultArr; 
 
} 
 

 
const weekdays = ['Monday', 'Tuesday', 'Wednesday']; 
 
console.log(processArray(weekdays, item => item.length));

如果你現在要大寫所有的人,並得到另一個數組?

function processArray(arr, callback) { 
 

 
    if(typeof callback !== 'function') { 
 
     throw new Error('The callback is not a function'); 
 
    } 
 

 
    const resultArr = new Array(); 
 
    
 
    for (var i = arr.length - 1; i >= 0; i--) { 
 
     resultArr[i] = callback(arr[i]); 
 
    } 
 
    
 
    return resultArr; 
 
} 
 

 
const weekdays = ['Monday', 'Tuesday', 'Wednesday']; 
 
console.log(processArray(weekdays, item => item.toUpperCase()));

對於這個兩個動作,如果我們不傳遞一個回調函數,我們需要創建2種獨立的功能,用自己的行動。通過參數傳遞,我們使功能通用,所以我們給單功能邏輯邏輯如何處理每個項目,並返回結果

它會調用每個項目的函數,將該項目作爲參數傳遞給函數並返回結果。然後我們將結果放入新的映射數組中。

這是一個可接受的方法?

是的這是一個可以接受的方法。這是一種非常現代的方法。你有一個函數,每個項目都會處理你將傳遞給它的任何邏輯。在Javascript中,有許多使用這種風格的函數(例如Array#mapArray#forEach)。還有很多庫都有這樣的類型函數。這不僅僅在Javacript中。

1

您可以請確保調用回調函數,通過檢查它的功能的第一,像這樣:

function processArray(arr, callback) { 
    var resultArr = new Array(); 
    for (var i = arr.length - 1; i >= 0; i--) 
     resultArr[i] = typeof callback === "function" && callback(arr[i]); 
    return resultArr; 
} 

如果callback不是一個函數,resultArr[i]將被設置爲false

如果你想設置resultArr[i]null(或其他值),像這樣的工作太:

resultArr[i] = typeof callback === "function" ? callback(arr[i]) : null 
1

callback一個持功能,其中傳遞作爲一個變量論據。當然,驗證function類型的參數是很好的。

function processArray(arr, callback) { 
    var resultArr = new Array(); 
    for (var i = arr.length - 1; i >= 0; i--) 
     resultArr[i] = callback(arr[i]); 
    return resultArr; 
} 

var callback = function() { /* do something */ } 
processArray([1, 2, 3], callback) // callback will hold a function you've assigned