嵌套函数可以使用在父函数中其他函数中设置了值的变量吗? (JavaScript)

时间:2018-12-31 21:19:44

标签: javascript function variables nested

我是一个总的初学者,尝试编写代码以滚动到一系列分支d100表上(第一个表的结果确定下一个要滚动的表,依此类推)。

我通过将其全部作为一个函数编写来使其工作,但是由于我想多次循环访问一个特定的表,同时仍引用上一个表的结果,因此我希望将其作为系列嵌套函数。

我遇到的问题是,如果我将用作一个函数的相同代码嵌套到父函数中的一个函数中,则EDIT: yearResults现在正在写入HTML,但是{ {1}}返回为未定义状态

有没有办法使我的作品生效?这是实现这一目标的愚蠢方法吗?谢谢您的帮助。

monthResults

2 个答案:

答案 0 :(得分:2)

您的条件有误:

knex

应该是:

knexfile

请记住对代码中的所有范围检查执行此操作。


此外,考虑到代码中的注释为真(if (yearRoll >= 1 && <= 50) { ),您可以继续删除if (yearRoll >= 1 && yearRoll <= 50) { random number between 1 and 100检查。

答案 1 :(得分:0)

是的,嵌套函数将有权访问在父函数中声明的变量。

但是,这可能不是您想要的,因为很容易意外地覆盖其中一个值。

相反,请考虑将其他功能分解为各自范围内的单独功能。请参见下面的示例(进行了一些小的修改,以消除语法错误):

function fullRoll() {
    var yearResults = annualTable();
    var monthResults = monthlyTable(yearResults);

    document.getElementById('annual').innerHTML = yearResults;
    document.getElementById('month1').innerHTML = monthResults;
}

function annualTable() { 
    var yearRoll = 23; //*random number between 1 and 100//*

    if (yearRoll >= 1 && yearRoll <= 50) {
        return "x";
    } else if (yearRoll >= 51 && yearRoll <= 100) {
        return "y";
    }
}

function monthlyTable(yearResults) {      
    if (yearResults == "x") {
        var monthRoll = 72; //*random number between 1 and 100//*

        if (monthRoll >= 1 && monthRoll <= 100) {
            return "a";
        }
    } else if (yearResults == "y") {
        var monthRoll = 23; //*random number between 1 and 100//*

        if (monthRoll >=1 && monthRoll <=100) {
            return "b";
        }
    }
}