Разберем по порядку
function ask1(){
var a = prompt("Ввести еще одного пользователя?", "");
if (a!=null){
ask();}
else (test());
}
Тут лучше использовать confirm. Также тут не правильно используется else. Будет выглядеть так:
function ask1(){
if (confirm("Ввести еще одного пользователя?")) {
ask();
} else {
test()
}
}
Вторая ошибка в объявлении метода test
function test(persons) {
res = persons.join("<br/>");
document.write("<p>" + res);
}
Вы почему то на вход принимаете массив, но не передаете его в месте вызова. И этот параметр можно опустить.
Метод say. Вы на вход ожидаете параметр person, нов месте вызова его не передаете.
Так же у вас одна и таже ссылка на person. Т.е. не вводишь нового а меняешь старого и добавляешь его еще раз в массив.
Весь код будет выглядеть так:
var persons = [];
function ask() {
var person = {}
person.name = prompt("Введите свое имя:");
person.sname = prompt("Введите свою фамилию:");
person.age = prompt("Введите свой возраст:");
persons.push(person);
ask1();
}
function ask1(){
if (confirm("Ввести еще одного пользователя?")) {
ask();
} else {
test()
}
}
function test() {
persons.forEach(person => { say(person); document.write("<p></p>");})
}
function say(person) {
document.write("Имя: " + person.name + "<br/>");
document.write("Фамилия: " + person.sname + "<br/>");
document.write("Возраст: " + person.age + "<br/>");
document.write("");
}
ask();