Глобальный объект не определен даже после обновления в функции - PullRequest
0 голосов
/ 06 декабря 2018

Будучи пользователем C ++ и совершенно новым для web-dev, я не могу понять, почему глобальная переменная 'angle' не обновляется внутри функции setup ().Потому что в последней строке, где я запускаю console.log (angle [1] .arc_colour), он возвращает меня неопределенным.Однако, если я пытаюсь напечатать ту же команду в консоли, возвращается конечное число.

(ПРИМЕЧАНИЕ: setup () - это функция в p5.js, которая вызывается первой при каждом выполнении)

//quick.js
var angle = new Array(200);

function Drawn_Arc(begin_angle, end_angle, arc_colour) {
    this.begin_angle = begin_angle;
    this.end_angle = end_angle;
    this.arc_colour = arc_colour;
}

function swap(a, b) {
    a = a + b;
    b = a - b;
    a = a - b;
}

function setup() {
    createCanvas(windowWidth, windowHeight);
    background(230);
    noStroke();
    colorMode(HSL, 2000);
    for (let i = 1; i <= 200; i++) {
        angle[i - 1] = new Drawn_Arc(((i - 1) * PI) / 100, (i * PI) / 100, random(0, 2000));
        fill(angle[i - 1].arc_colour, 2000, 1000);
        arc(windowWidth / 2, windowHeight / 2, windowHeight - 12, windowHeight - 12, angle[i - 1].begin_angle, angle[i - 1].end_angle, PIE);
    }
}
console.log(angle[1].arc_colour);
//---html---
<html style="margin : 0px; padding : 0px">

<head>
    <meta charset="utf-8" />
    <title>Quick Sort</title>
</head>

<body style="margin : 0px; padding : 0px">
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.2/p5.js"></script>
    <script type="text/javascript" src="quick.js"></script>
</body>

</html>

1 Ответ

0 голосов
/ 06 декабря 2018

[...] глобальная переменная 'angle' не обновляется внутри функции setup().Потому что в последней строке, где я запускаю console.log(angle[1].arc_colour), он возвращает меня неопределенным.

Строка onsole.log(angle[1].arc_colour); не находится в функции setup, но находится в конце скрипта вглобальная область действия.

Переместите console.log(angle[1].arc_colour); в функцию настройки, чтобы это было сделано после инициализации массива:

function setup() {
    createCanvas(windowWidth, windowHeight);
    background(230);
    noStroke();
    colorMode(HSL, 2000);
    for (let i = 1; i <= 200; i++) {
        angle[i - 1] = new Drawn_Arc(((i - 1) * PI) / 100, (i * PI) / 100, random(0, 2000));
        fill(angle[i - 1].arc_colour, 2000, 1000);
        arc(windowWidth / 2, windowHeight / 2, windowHeight - 12,
            windowHeight - 12, angle[i - 1].begin_angle, angle[i - 1].end_angle, PIE);
    }

    console.log(angle[1].arc_colour);
}
// console.log(angle[1].arc_colour);

Что, если я захочу использоватьмассив в какой-то другой функции.Как бы я это сделал?

Конечно, вы также можете записать массив в функцию:

function setup() {
    createCanvas(windowWidth, windowHeight);
    // ......

    logarray();
}

function logarray()
{
    console.log(angle[1].arc_colour);
}
...