Я новичок в JavaScript.
Когда я запускаю этот код, я получаю эту ошибку в Chrome's console:
Uncaught ReferenceError: aresults is not defined
aresults представляет собой array. Я думал, что инициализировал его до того, как запустится For loop, который создает целые числа, которые array будет хранить. Но Chrome вроде говорит, что array нет.
Готовый код предназначен для создания определенного пользователем количества целых чисел от 1 до 10 и сохранения их в массиве, а затем подсчета количества целых чисел в массиве, которые находятся между заданным пользователем целевым значением и 10.
Что я здесь сделал не так? И как я могу это исправить?
Спасибо.
<!DOCTYPE html>
<head>
</head>
<body>
<h2>Storyteller dice roller</h2>
<!--User selects number of 10-sided dice to be rolled, and target number -->
Number of dice: <input type = "number" value = "5" id = "dice"><br>
Difficulty: <input type = "number" value = "6" id = "diff"><br>
<!--Button executes the "roll" JavaScript function-->
<button onclick = "roll()">Roll</button>
<script>
function roll() {
// initialize array to store results of "dice rolls"
var aresults = [];
// store user input of "Number of dice" as vdice variable
var vdice = document.getElementById("dice").value;
// store user input of "Difficulty" as vdiff variable
var vdiff = document.getElementById("diff").value;
// simulates rolling a number of 10-sided dice
// for loop:
// set vrolled to 0;
// run loop if vrolled is less than dice;
// increase vrolled by 1 each time loop is run
// continue for as many times as there are "dice"
for (vrolled = 0; vrolled <= vdice; vrolled++) {
// Create a random number between 1 and 10
var vresult=Math.floor(Math.random() * 10) + 1;
// append the new dice roll result to the array
aresults.push(vresult);
}
}
// Display variable results in console
console.info("Results array");
console.info(aresults);
console.info("Dice to be rolled");
console.info(vdice);
console.info("Roll result");
console.info(vresult);
console.info("Difficulty");
console.info(vdiff);
console.info("Dice rolled");
console.info(vrolled);
</script>
</body>
aresults объявлен внутри функции roll, он не определен в глобальной области видимости.
@CertainPerformance Спасибо за совет. И извините, что усложняю задачу. Я пишу код в Sublime Text 3. Я вырезал и вставлял между разными версиями кода, которые скремблировали отступы. И автоматическое исправление ST не помогло.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы создаете все переменные внутри функции и пытаетесь получить к ним доступ снаружи. Определение с использованием var означает, что переменная будет доступна везде в области видимости. Это не всегда означает, что он будет доступен везде, т.е. Глобальный Определение всех переменных вне области видимости решит проблему, поскольку все переменные станут глобальными.
<!DOCTYPE html>
<head>
</head>
<body>
<h2>Storyteller dice roller</h2>
<!--User selects number of 10-sided dice to be rolled, and target number -->
Number of dice: <input type = "number" value = "5" id = "dice"><br>
Difficulty: <input type = "number" value = "6" id = "diff"><br>
<!--Button executes the "roll" JavaScript function-->
<button onclick = "roll()">Roll</button>
<script>
var aresults = [];
var vdice = document.getElementById("dice").value;
var vresult;
// store user input of "Difficulty" as vdiff variable
var vdiff = document.getElementById("diff").value;
function roll() {
// initialize array to store results of "dice rolls"
// store user input of "Number of dice" as vdice variable
// simulates rolling a number of 10-sided dice
// for loop:
// set vrolled to 0;
// run loop if vrolled is less than dice;
// increase vrolled by 1 each time loop is run
// continue for as many times as there are "dice"
for (vrolled = 0; vrolled <= vdice; vrolled++) {
// Create a random number between 1 and 10
vresult=Math.floor(Math.random() * 10) + 1;
// append the new dice roll result to the array
aresults.push(vresult);
}
}
// Display variable results in console
console.info("Results array");
console.info(aresults);
console.info("Dice to be rolled");
console.info(vdice);
console.info("Roll result");
console.info(vresult);
console.info("Difficulty");
console.info(vdiff);
console.info("Dice rolled");
console.info(vrolled);
</script>
</body>Спасибо. Я пытался разместить "varresults = [];" вне функции, но это все равно не сработало. Переместил его в головной раздел, и теперь он распознается.
Вы можете подумать об использовании согласованных отступов при написании кода — это значительно упростит чтение и отладку не только для потенциальных ответчиков, но и для вас, когда мы все сможем сразу увидеть блоки
{}и их уровень вложенности, вместо того, чтобы тщательно выбирать каждую строку, чтобы выбрать логические пути. (При правильном отступе вы увидите, чтоaresultsне входит в область действия на верхнем уровне, где вы пытаетесь его зарегистрировать)