@dyzg

Почему не складываются переменные в функции?

Здравствуйте, пишу свой код который показывает информацию и высчитывает доходы и расходы кафе.
Но в функции all у меня не складываются переменные. Почему?
Вот код
//Начало кода
let object = {
    about: {
        name: "Кафе",
        adress: "Улица Молокова, дом 3."
    },
    doxod: {
        prod: 68,
        thank: 12,
        investors: 6,
        alln: 0,
    },
    rabotn: {
        rabot: 4,
    },
    rasxod: {
        zp: 23,
        other: 40,
        allr: 0,
    }
}
// переменные

let doxod = object.doxod
let rasxod = object.rasxod
let about = object.about
let rabotnk = object.rabotn
let all1 = 0
let newall1 = 0
let newall2 = 0

// функции

function doxods(doxod,newall1) {
    newall1 = doxod.alln + doxod.prod + doxod.thank + doxod.investors
    alert(newall1)
}

function rasxods(rasxod,newall2) {
    newall2 = rasxod.allr + rasxod.zp + rasxod.other
    alert(newall2)
}

function all(all1,newall1,newall2) {
    all1 = newall1 + newall2
    alert(all1)
}

function abouts(about,rabotnk,all1) {
    alert("Название кафе: " + about.name)
    alert("Адресс: " + about.adress)
    alert("Количество работников: " + rabotnk.rabot)
    alert("Чистый доход кафе: " + all1)
}

// вызов 
doxods(doxod,newall1)
rasxods(rasxod,newall2)
all(all1,newall1,newall2)
abouts(about,rabotnk,all1)
  • Вопрос задан
  • 144 просмотра
Решения вопроса 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Вы внутри функции пытаетесь изменить переменную из аргумента. Это так не работает

function all(all1,newall1,newall2) {
    all1 = newall1 + newall2 // all1 это не глобальная переменная, а ваша переменная из аргументов (т.к. такое же название)
    alert(all1)
}

Это касается всех функций. Ваши функции не меняют глобальные переменные из-за конфликта с названиями локальных переменных. Поэтому ноли и выходят, т.к. значения не меняются.
Вам нужно либо изменить название локальной переменной из аргумента, или же (что правильнее) не менять внешние переменные в функции, а просто возвращать результат функции. Примерно вот так

function all(all1,newall1,newall2) {
    const resultAll1 = newall1 + newall2;
    alert(resultAll1);
    return resultAll1;
}

const resultAll = all(all1,newall1,newall2)
Ответ написан
Комментировать
@Sobaka_a
так должно работать я "переопределил" переменные в функциях добавил return + функции должны быть в начале кода а потом весь код
//Начало кода
let object = {
    about: {
        name: "Кафе",
        adress: "Улица Молокова, дом 3."
    },
    doxod: {
        prod: 68,
        thank: 12,
        investors: 6,
        alln: 0,
    },
    rabotn: {
        rabot: 4,
    },
    rasxod: {
        zp: 23,
        other: 40,
        allr: 0,
    }
}
// переменные

let doxod = object.doxod
let rasxod = object.rasxod
let about = object.about
let rabotnk = object.rabotn
let all1 = 0
let newall1 = 0
let newall2 = 0

// функции

function doxods(doxod,newall1) {
    newall1 = doxod.alln + doxod.prod + doxod.thank + doxod.investors
    alert(newall1)
    return newall1
}

function rasxods(rasxod,newall2) {
    newall2 = rasxod.allr + rasxod.zp + rasxod.other
    alert(newall2)
    return newall2
}

function all(all1,newall1,newall2) {
    all1 = newall1 + newall2
    alert(all1)
    return all1
}

function abouts(about,rabotnk,all1) {
    alert("Название кафе: " + about.name)
    alert("Адресс: " + about.adress)
    alert("Количество работников: " + rabotnk.rabot)
    alert("Чистый доход кафе: " + all1)
}

// вызов 
newall1 = doxods(doxod,newall1)
newall2 = rasxods(rasxod,newall2)
all1 = all(all1,newall1,newall2)
abouts(about,rabotnk,all1)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы