簡體   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