Не работает код, возможно оператор 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 шт):
Если по пунктам, то:
Функции
area(), perm(), size()по факту не принимают никаких параметров, вызов ихonclick="area(width,height)"не имеет смысла, так как на момент вызова этих данных нет и в помине.Данные, вроде
widthвы пытаетесь получить в теле самой функции, вызывая блокирующую функциюprompt(), что само по себе не совсем правильно. Среда для работы скрипта JavaScript дает множество отличных возможностей для получения данных от пользователя. Например, с помощьюinput type="number". Более того, результат вызоваprompt()нигде не хранится. Поэтому я прописал:let height = +prompt("height");Где ввожу, локальную для функции переменную, которая будет принимать возвращаемый результат. Унарный оператор+преобразовывает полученную строку (по возможности) в число.В теле функции
area()и других вызывается функцияresult(), но результат ее вызова не принимается. А самаresult()ничего и не возвращает. Более того, функция и предполагаемое возвращаемое имеет одно и то же имяresult. Можно было объявить переменнуюresultв глобальной области, но при попытке задать ей значение в теле одноименной функции (result = prompt("want to see result?"), произойдет конфликт имен и скрипт закончится ошибкой. Поэтому функции лучше называть какими-то действиями: getResult, countArea, doSomething, одним словом. В вашем же варианте, в частиswitch (result)переменнаяresultхранит ссылку на функцию как объект. Поэтому я опять же ввожу локальную переменнуюresult, в которую помещаю возвращаемое функциейgetResult()значение. Хотя с таким же успехом можно коротко прописатьswitch(getResult()).Сам по себе вызов
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> <!--Сократил немного -->