Не работает код, возможно оператор switch

Делаю калькулятор, который будет считать формулами и столкнулся с тем что при запуске любой function все прекрасно работает, но после этого всего alert(result) НЕ РАБОТАЕТ!

HTML Code:

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WDC</title>
    <link rel="stylesheet" type="text/css" href="css/css.css">
    <script src="JavaScript/main.js"></script>
</head>
<body>
    <button onclick="area(width, height)">AREA</button>
    <button onclick="perm(width, height)">perimetr</button>
    <button onclick="sizes(a)">size of square</button>
</body>
</html>

Js code:

    var height
var width
var a
function result(){
    var result = prompt("want to see result?")
}

//площадь//

function area(width, height) {
    prompt("height")
    prompt("width?")
    result()

    switch (result) {
        case "y":
            alert(height * width)
            break;
        case "n":
            alert("ok")
            break;
        default:
            break;
    }
}

//пеериметр//

function perm(width, height) {
    prompt("height")
    prompt("width?")
    result()

    switch (result) {
        case "y":
            alert(height + width * 2)
            break;
        case("n"):
            alert("ok")
        break;
        default:
            break;
    }
}

//объем куба //

function sizes(a) {
    prompt("verge")
    result()

    switch (result) {
        case "y":
            alert(a * 3)
            break;
        case "n":
            alert("ok")
            break;
        default:
            break;
    }
}

кому легче работать с файлами то вот ссылка на архив


Ответы (1 шт):

Автор решения: Leonid

Если по пунктам, то:

  1. Функции area(), perm(), size() по факту не принимают никаких параметров, вызов их onclick="area(width,height)" не имеет смысла, так как на момент вызова этих данных нет и в помине.

  2. Данные, вроде width вы пытаетесь получить в теле самой функции, вызывая блокирующую функцию prompt(), что само по себе не совсем правильно. Среда для работы скрипта JavaScript дает множество отличных возможностей для получения данных от пользователя. Например, с помощью input type="number". Более того, результат вызова prompt() нигде не хранится. Поэтому я прописал:

    let height = +prompt("height"); Где ввожу, локальную для функции переменную, которая будет принимать возвращаемый результат. Унарный оператор + преобразовывает полученную строку (по возможности) в число.

  3. В теле функции area() и других вызывается функция result(), но результат ее вызова не принимается. А сама result() ничего и не возвращает. Более того, функция и предполагаемое возвращаемое имеет одно и то же имя result. Можно было объявить переменную result в глобальной области, но при попытке задать ей значение в теле одноименной функции (result = prompt("want to see result?"), произойдет конфликт имен и скрипт закончится ошибкой. Поэтому функции лучше называть какими-то действиями: getResult, countArea, doSomething, одним словом. В вашем же варианте, в части switch (result) переменная result хранит ссылку на функцию как объект. Поэтому я опять же ввожу локальную переменную result, в которую помещаю возвращаемое функцией getResult() значение. Хотя с таким же успехом можно коротко прописать switch(getResult()).

  4. Сам по себе вызов prompt() для подтверждения вывода результата тоже сомнителен. Не предлагается вариантов 'y' or 'n', эту информацию можно узнать только из кода. Тогда уж лучше воспользоваться confirm(). Хотя ни prompt, ни confirm, ни alert совершенно пользоваться не стоит ни при каких обстоятельствах.

Не ругайте сильно. Я оставил логику автора, лишь привел к минимально рабочему варианту.

function getResult(){
    return prompt("want to see result?"); // Возвращается значение, введенное пользователем
}

function area() {
    let height = +prompt("height"); // Принимаем значение, преобразовываем в Number и присваиваем переменной
    let width = +prompt("width?");
    let result = getResult(); // Принимаем, возвращаемое функцией, значение

    switch (result) {
        case "y":
            alert(height * width)
            break;
        case "n":
            alert("ok")
            break;
        default:
            break;
    }
}
<button onclick="area()">AREA</button> <!--Сократил немного -->

→ Ссылка