#javascript
Вопрос:
Как я могу распечатать этикетку, если соответствующая функция вызывается в console.log. Теперь он не печатает этикетку и результат ? Может кто-нибудь, пожалуйста, посоветовать
let num1 = 100;
let num2 = 200;
let text = 'add';
calculationOfNumbers(text, num1, num2);
function calculationOfNumbers(text, num1, num2) {
if (text == 'add') {
let label = "Adding";
let result = addFunction(num1, num2);
console.log(`This is : ${label}` result);
} else if (text == 'subtract') {
let label = "Subtracting";
let result = subtractFunction(num1, num2);
console.log(`This is : ${label}` result);
}
}
function addFunction(num1, num2 ) {
let result = parseInt(num1) parseInt(num2);
return resu<
}
function subtractFunction(num1, num2) {
let result = parseInt(num2) - parseInt(num1) ;
return resu<
}
Комментарии:
1. JavaScript поддерживает возврат одного значения. Это значение должно быть записано в момент вызова функции, если вы хотите что-то с ним сделать. Учебник может быть хорошим местом для начала.
2. @DaveNewton Я понял свою ошибку , но я хотел бы знать, есть ли способ не писать объявление метки и журнал консоли дважды .
Ответ №1:
это return label, result
ничего не делает. Это то же самое, что делать return result
. Узнайте об операторе запятой. В JS еще нет типа данных кортежа.
Вместо этого вы могли бы сделать следующее:
function addFunction(num1, num2, label) {
let result = parseInt(num1) parseInt(num2);
return [label, result];
}
function calculationOfNumbers(x, num1, num2) {
let label, resu<
if (x == 'add') {
[label, result] = addFunction(num1, num2, "adding");
} else if (x == 'subtract') {
[label, result] = subtractFunction(num1, num2, "subtracting");
}
console.log(`This is : ${label} ${result}`);
}
т. е., возвращайте массивы и используйте деструкцию.
Или даже:
function calculationOfNumbers(x, num1, num2) {
let resu<
if (x == 'add') {
result = addFunction(num1, num2);
} else if (x == 'subtract') {
result = subtractFunction(num1, num2);
}
console.log(`This is: ${label} ${result}`);
}
function addFunction(num1, num2) {
let result = parseInt(num1) parseInt(num2);
return label="adding", resu<
}
function subtractFunction(num1, num2) {
let result = parseInt(num2) - parseInt(num1) ;
return label="subtracting", resu<
}
(Я не говорю, что это лучший подход, хотя)
Ответ №2:
Поскольку вы не можете возвращать несколько значений с помощью одного return
оператора в JavaScript, один из вариантов, который вы могли бы использовать, — это вместо этого возвращать object
примерно так:
let total = 0;
let num1 = 100;
let num2 = 200;
let text = 'add';
let label = "";
calculationOfNumbers(text, num1, num2);
function calculationOfNumbers(x, num1, num2) {
let info;
if (x == 'add') {
info = addFunction(num1, num2, "adding");
} else if (x == 'subtract') {
info = subtractFunction(num1, num2, "subtracting");
}
console.log(`This is ${info.label} : ${info.result}`);
}
function addFunction(num1, num2, label) {
let result = parseInt(num1) parseInt(num2);
return { label, result };
}
function subtractFunction(num1, num2, label) {
let result = parseInt(num2) - parseInt(num1);
return { label, result };
}
Обратите внимание , как я назначаю каждый вызов функции переменной info
, после чего вы можете получить доступ к требуемым свойствам с info.label
помощью и info.results
, соответственно.
Ответ №3:
в вашем кодексе необходимо внести несколько изменений
function calculationOfNumbers(x, num1, num2) {
if (x == 'add') {
// function is returning some values, but it was never stored somewhere to be used later
addFunction(num1, num2, "adding");
} else if (x == 'subtract') {
// same situation, function is returning some values, but it was never stored somewhere to be used later
subtractFunction(num1, num2, "subtracting");
}
// you are printing (result) but it was never declared before
console.log(`This is : ${label}` result);
}
function addFunction(num1, num2, label) {
// it's better to use Number(num1) instead of parseInt()
let result = parseInt(num1) parseInt(num2);
// you are returning label inside here, however you didn't amend the global variable result,
// also no need to pass it down to this function, the add function should be returning only the result of the calculation
return label, resu<
}
function subtractFunction(num1, num2, label) {
let result = parseInt(num2) - parseInt(num1) ;
return label, resu<
}
Таким образом, код после внесения поправок должен выглядеть следующим образом:
let num1 = 100;
let num2 = 200;
let text = 'add';
calculationOfNumbers(text, num1, num2);
function calculationOfNumbers(x, num1, num2) {
let label = x;
let result = 0;
if (x == 'add') {
result = addFunction(num1, num2);
} else if (x == 'subtract') {
result = subtractFunction(num1, num2);
}
console.log(`This is : ${label}` result);
}
function addFunction(num1, num2) {
let result = Number(num1) Number(num2);
return resu<
}
function subtractFunction(num1, num2) {
let result = Number(num2) - Number(num1);
return resu<
}