2017-08-03 64 views
0

請參閱下面的兩個函數。他們導致相同的輸出[4,6],但設置不同。只有第一個函數使用回調函數是正確的嗎?第一個功能比另一個更受歡迎(更優雅?)?第二個例子中的'map'是高階函數是否正確,因爲它使用括號內的回調函數? 謝謝!什麼是回調函數的正確實現?

function processArray(arr,callback){ 
return arr.map(callback) 
} 

processArray([2,3], function(number){return number*2}) 

function processArray(arr){ 
return arr.map(function(element){ 
return otherFunction(element)}) 
} 

function otherFunction(number){ 
return number*2} 

processArray([2,3]) 
+1

如果從函數調用*函數會算作高階函數,幾乎所有函數都是高階函數,因爲您通常一直在調用* some *函數。 – deceze

+1

命名函數的要點是封裝和代碼重用性。如果您不打算重新使用回調,並且您使用的語言沒有性能缺陷,則第一個示例更具可讀性並且更易於重複使用。 – slackOverflow

+0

明白了,謝謝你們! – JeroenT

回答

1

是不是正確的,只有第一個功能是利用一個回調函數?

No. arr.map需要回撥。你只是在這裏看不到它的定義。

是第一個函數首選(更優雅?)而不是另一個?

是的,但(可能)不是你認爲的原因。包裝otherFunction的匿名函數是毫無意義的。你也可以寫

function processArray(arr){ 
    return arr.map(otherFunction) 
} 

function otherFunction(number){ 
    return number*2 
} 

processArray([2,3]) 

而且是正確的,「地圖」是高階函數在第二個例子,因爲它利用了回調函數是它的括號內的?

在第一個示例中,processArraymap都是高階函數。第二,是的,只有map是高階。

很容易檢查一個函數,看看它是否是一個更高階的函數:調用它的一個(或多個)參數?

相關問題