繁体   English   中英

相互递归和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,您必须在文件顶部添加全局变量指令,以便忽略临时“未定义”函数和变量的使用。

/*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);
    }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM