带有回调JS的递归函数

时间:2018-08-12 17:00:50

标签: javascript recursion callback functional-programming

我有这两个递归函数。最上面的一个起作用,但是当我尝试使quantityColumn成为第二个函数的callback时,我得到一个错误callback is not a function。有什么想法我做错了吗?

var sumColumn = function(lineNumber) {
    return lineNumber === 0 
        ? quantityColumn(0)
        : quantityColumn(lineNumber) + sumColumn(lineNumber -1)
}

sumColumn(lineCount) // returns 9 

var sumColumn = function(callback, lineNumber) {
    return lineNumber === 0 
        ? callback(0)
        : callback(lineNumber) + sumColumn(callback(lineNumber -1), lineNumber -1)
}
sumColumn(quantityColumn, lineCount) // callback is not a function

如果需要更多代码。这是quantityColumn函数的含义。还要注意,current.getSublistValue是第三方API(NetSuite),它基本上只返回表上线/行的交点。

 var columnValue = R.curry(function(getSublistValue, sublistId, column, i) {
     return getSublistValue({
         sublistId: sublistId,
         fieldId: column,
         line: i              
      })
   }
)
var itemSublist(current.getSublistValue)('item')
var quantityColumn = itemSublist('quantity')
var lineCount = current.getLineCount('item') - 1 // first index is 0

quantityColumn(5) // 2
quantityColumn(4) // 1
quantityColumn(3) ...

var sumColumn = function(lineNumber) {
    return lineNumber === 0 
        ? quantityColumn(0)
        : quantityColumn(lineNumber) + sumColumn(lineNumber -1)
}
sumColumn(lineCount) // returns 9

1 个答案:

答案 0 :(得分:1)

var sumColumn = function(lineNumber) {
    return lineNumber === 0 
        ? quantityColumn(0)
        : quantityColumn(lineNumber) + sumColumn(lineNumber -1)
}

sumColumn(lineCount) // returns 9 

var sumColumn = function(callback, lineNumber) {
    return lineNumber === 0 
        ? callback(0)
        : callback(lineNumber) + sumColumn(callback, lineNumber -1)
}
sumColumn(quantityColumn, lineCount) // callback is not a function

在此行callback(lineNumber) + sumColumn(callback(lineNumber -1), lineNumber -1)中,您要调用的函数callback(带有lineNumber-1参数)是您想要传递的函数