javascript - 带有回调 JS 的递归函数
问题描述
我有这两个递归函数。第一个有效,但是当我尝试将该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
是,第 3 方 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
解决方案
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),您想要传递它