相互递归和 JSLint - 函数在定义之前被使用
Mutual recursion and JSLint - function was used before it was defined
如果我编写以下代码,JSLint 会抱怨 'isOdd' 在定义 之前被使用。有没有办法写出相互递归的代码,还请JSLint?
var isEven = function(n) {
if (n === 0) {
return true;
}
return isOdd(n - 1);
};
var isOdd = function(n) {
if (n === 0) {
return false;
}
return isEven(n - 1);
};
对于 JSLint,您必须在文件顶部添加一个全局变量指令,以便它忽略临时 "undefined" 函数和变量的使用。
/*global isOdd */
var isEven = function(n) {
if (n === 0) {
return true;
}
return isOdd(n - 1);
};
var isOdd = function(n) {
if (n === 0) {
return false;
}
return isEven(n - 1);
};
您也可以在顶部声明 isOdd
,但随后您将更改您的实际代码,因为 linting 程序不理解提升:
var isOdd;
var isEven = function(n) {
if (n === 0) {
return true;
}
return isOdd(n - 1);
};
isOdd = function(n) {
if (n === 0) {
return false;
}
return isEven(n - 1);
};
将这些函数转换为对象的方法可以消除来自 JSLint 的错误消息。这也能更好地减少全局命名空间的污染。
var numUtil = {
isEven: function(n) {
if (n === 0) {
return true;
}
return this.isOdd(n - 1);
},
isOdd: function(n) {
if (n === 0) {
return false;
}
return this.isEven(n - 1);
}
};
如果我编写以下代码,JSLint 会抱怨 'isOdd' 在定义 之前被使用。有没有办法写出相互递归的代码,还请JSLint?
var isEven = function(n) {
if (n === 0) {
return true;
}
return isOdd(n - 1);
};
var isOdd = function(n) {
if (n === 0) {
return false;
}
return isEven(n - 1);
};
对于 JSLint,您必须在文件顶部添加一个全局变量指令,以便它忽略临时 "undefined" 函数和变量的使用。
/*global isOdd */
var isEven = function(n) {
if (n === 0) {
return true;
}
return isOdd(n - 1);
};
var isOdd = function(n) {
if (n === 0) {
return false;
}
return isEven(n - 1);
};
您也可以在顶部声明 isOdd
,但随后您将更改您的实际代码,因为 linting 程序不理解提升:
var isOdd;
var isEven = function(n) {
if (n === 0) {
return true;
}
return isOdd(n - 1);
};
isOdd = function(n) {
if (n === 0) {
return false;
}
return isEven(n - 1);
};
将这些函数转换为对象的方法可以消除来自 JSLint 的错误消息。这也能更好地减少全局命名空间的污染。
var numUtil = {
isEven: function(n) {
if (n === 0) {
return true;
}
return this.isOdd(n - 1);
},
isOdd: function(n) {
if (n === 0) {
return false;
}
return this.isEven(n - 1);
}
};