如何定义一对在Javascript中相互调用的函数,以便JS-lint不会抱怨在定义之前使用'factorial'?
function factorial1(n) { return factorial(n); }
function factorial(n) { return n === 0 ? 1 : n * factorial1(n - 1); }
似乎没有满足JSlint的有效排序。 (一个可以嵌入到另一个中,但这对于所有相互调用的函数集合来说都是一场噩梦。)
当然这是由语言处理的吗? 这只是JSlint中的一个错误吗? (这个问题肯定已在某个地方得到解答,但我找不到了!)
答案 0 :(得分:7)
函数内部的引用在执行之前不会被解析。只要两个函数都是在其中一个函数执行时定义的,它们就会找到彼此。
如果你想摆脱JSLint警告,你可以在之前定义函数的名称:
var factorial;
function factorial1(n) { return factorial(n); }
function factorial(n) { return n === 0 ? 1 : n * factorial1(n - 1); }
答案 1 :(得分:0)
我更喜欢这种语法:
var factorial1 = function(n) { return factorial(n); }
var factorial = function(n) { return n === 0 ? 1 : n * factorial1(n - 1); }
将无法忘记使用此语法“声明”函数。
答案 2 :(得分:0)
解决此问题的另一种方法是将其作为回调函数传递,如下所示:
const factorial1 = (n, callback) => { return callback(n); }
const factorial = (n) => { return n === 0 ? 1 : n * factorial1(n - 1, factorial ); }