2017-08-03 66 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是高阶。

很容易检查一个函数,看看它是否是一个更高阶的函数:调用它的一个(或多个)参数?

相关问题