返回一个函数调用是否好?

假设有一个叫做foo的函数。 我们将写一个函数,最后调用foo,就像这样(请注意,这是一个真实的世界场景):

 function update(string, callback) { if (arguments.count == 2) { if (typeof arguments[0] === 'string' && typeof arguments[1] === 'function') { updateRows(string, callback) } else { callback(Error('Invalid arguments.')) } } else if (arguments.count == 1) { if (typeof arguments[0] === 'function') { async.each(array, updateRows, callback) } else { callback(Error('Invalid arguments.')) } } else { callback(Error('Invalid arguments')) } } 

如您所见,error handling程序callback被写入三次。

不过,我们可以使用return语句重构代码:

 function update(string, callback) { if (arguments.count == 2) { if (typeof arguments[0] === 'string' && typeof arguments[1] === 'function') { return updateRows(string, callback) } } else if (arguments.count == 1) { if (typeof arguments[0] === 'function') { return async.each(array, updateRows, callback) } } callback(Error('Invalid arguments')) } 

代码现在比以前更干净了。

因此,从函数中返回函数是否​​好,这是一个好的做法吗? 我扫描了Ryan Dahl编写的一些代码块,没有任何后果。

没有对这两者进行基准testing,我不认为有明显的性能差异。

编辑:正如deceze警告我,我们没有返回函数,我们只是在返回语句中调用函数。 在评论之后,我将问题标题改为“返回函数调用” 。 如果导致混淆,则可以根据build议进行更新。

我不知道多less冗长的需要是你的错误信息,如果你真的需要通过错误的方法使用发送错误信息,你可以抛出一个错误,而不是在callback参数中返回错误。

如果你使用任何callback函数,这个callback函数应该返回有关执行的数据或者错误,如果callback之前发生了错误,你必须在当前的执行阶段发送这个信息,而不是等待另一个给你这个信息。

是的,如果你愿意,你可以返回一个函数。

所以,这是一个非常简单的build议与假设的代码:

 function foo () { var isArgumentsValid = typeof arguments[0] == "string" && typeof arguments[1] == "function"; if ( isArgumentsValid) { return function () { // do your code here here } } throw Error() return null; } // usage foo("bar", function(){console.log('after foo task')})()