Почему моя функция возвращает этот странный вывод? - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь написать функцию, которая принимает целое число в качестве входных данных и определяет, сколько точек существует в пятиугольной форме вокруг центральной точки на 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;
}

Но я не понимаю, почему они разные.Все, что я сделал, это объединил математику верха, низа и сторон в одну строку, называемую ответом.Я не понимаю, почему первая функция сработала, а вторая - нет, и я также не понимаю вывод, который мне дала первая функция.Если бы кто-нибудь мог объяснить мне эти две вещи, я был бы очень признателен, спасибо.

enter image description here

1 Ответ

1 голос
/ 02 июня 2019

Вы должны использовать ключевые слова var , const или let , иначе ваши переменные будут связываться с глобально установленными переменными (такими как 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) относится к самому верхнему окну (применимо во вложенных фреймах).Без ключевого слова переменная просто устанавливается как свойство окна.И это только для чтения

...