javascript函数之间的循环引用

时间:2013-06-24 06:33:10

标签: javascript

如何定义一对在Javascript中相互调用的函数,以便JS-lint不会抱怨在定义之前使用'factorial'?

function factorial1(n) { return factorial(n); }
function factorial(n) { return n === 0 ? 1 : n * factorial1(n - 1); }

似乎没有满足JSlint的有效排序。 (一个可以嵌入到另一个中,但这对于所有相互调用的函数集合来说都是一场噩梦。)

当然这是由语言处理的吗? 这只是JSlint中的一个错误吗? (这个问题肯定已在某个地方得到解答,但我找不到了!)

3 个答案:

答案 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 ); }