@Evgenij_nechujveter

Что делают значения в функции?

var a = +prompt("Введите первое число","");
    var operation = prompt("Введите операцию","+, -, /, *, ^");
    var b = +prompt("Введите второе число","");
    if (!parseInt(a) || !parseInt(b)) {
        alert ("Вы ввели неверное число");
    }


    function sum(a,b) {
        return a + b;
    }

    function subtract(a,b) {
        return a - b;
    }

    function multiply(a,b) {
        return a * b;
    }

    function devizion(a,b) {
        if (b === 0){
            alert("На ноль делить нельзя!")
        }
        else {
            return a / b;
        }

    }

    function exponentiation(a,b) {
        return Math.pow(a,b);
    }

    function calculate(cb, a, b) {
        var result = cb(a, b);
        document.write("Результат: " + result);
    }

    switch (operation) {
        case "+":
            calculate(sum, a, b);
            break;
        case "-":
            calculate(subtract, a, b);
            break;
        case "*":
            calculate(multiply, a, b);
            break;
        case "/":
            calculate(devizion, a, b);
            break;
        case "^":
            calculate(exponentiation, a, b);
            break;
    }


Что делают function calculate(cb)
и почему здесь так? они же нигде не обьявляются и это не переменные вроде

var result = cb(a, b);
  • Вопрос задан
  • 736 просмотров
Пригласить эксперта
Ответы на вопрос 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Прочитайте, пожалуйста, https://learn.javascript.ru/function-basics – обратите внимание на «локальные переменные».

Попробую разложить по полочкам.

var a = 1, b = 2; // эти a, b – «глобальные», выше всех, «видны» везде
function calculate(x, y, z) {
  // здесь определены локальные переменные x, y, z
  // и видны все переменные из уровней выше
  // напр. a и b
  // ждём, что x – это будет функция
  return x( y+a, z+b); // можно использовать и локальные и глобальные
}

function sum( a, b){ // а вот тут a,b – переопределены локально
  // и к тем, глобальным a и b не имеют никакого отношения!
  return a+b; // складывает те a и b, что передали при очередном вызове sum()
}

calculate( sum, 5, 6); // вызывает calculate, и там будет x = sum, y=5, z=6
sum( 7, 8);  // вызывает напрямую sum, внутри которого будет a=7 и b=8
// при этом глобальные a и b никак не пострадают.
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
В данном случае cb это сокращение от callback.
В зависимости от выбранной операции в функцию calculate передается соответствующий коллбэк и аргументы.
Ответ написан
Комментировать
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
Вот вызов функции
calculate(sum, a, b);
Вот сама функция
function calculate(cb, a, b) {
        var result = cb(a, b);
        document.write("Результат: " + result);
    }

Передали три аргумента, получили 3 аргумента. Что Вас смущает? То что 1-й аргумент это функция?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы