0

我正在尝试编写一个函数,该函数将整数作为输入并确定在第 N 次迭代中围绕中心点的五边形中存在多少个点。我能够解决这个挑战,但是在测试我的代码时,我从 google chrome 控制台收到了一个奇怪的输出,我不明白为什么。

这是一直给我错误的原始代码(错误显示在下面的图片链接中)

function sides(num) {
    total = 1;
    for (let i = 2; i <= num; i++) {
        top = 1;
        sides = (i - 1) * 4;
        bottom = i - 2;
        total += top + sides + bottom;
    }
    return total;
}

然后我把它改成了这个,效果很好:

function pentagon(num) {
    total = 1;
    for (let i = 2; i <= num; i++) {
        answer = (((i - 1) * 4) + 1) + (i - 2);
        total += answer

    }
    return total;
}

但我不明白为什么它们不同。我所做的只是将顶部、底部和侧面的数学合并到一条称为答案的行中。我不明白为什么第一个函数有效但第二个没有,我也不明白第一个函数给我的输出。如果有人能向我解释这两件事,我将不胜感激,谢谢。

在此处输入图像描述

4

1 回答 1

1

您应该使用varconstlet关键字,否则您的变量会与全局设置的变量(例如 top)混淆。

function sides(num) {
    let total = 1;
    for (let i = 2; i <= num; i++) {
        const top = 1;
        const sides = (i - 1) * 4;
        const bottom = i - 2;
        total += top + sides + bottom;
    }
    return total;
}

编辑:正如@Matthias 指出的那样:

window.top (MDN) 指的是最顶层的窗口(适用于嵌套 iframe)。没有关键字,变量只是设置为窗口的属性。而且是只读的

于 2019-06-02T20:29:31.567 回答