Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改后,将其他两个变量相加_Javascript_Variables_Reference - Fatal编程技术网

Javascript 更改后,将其他两个变量相加

Javascript 更改后,将其他两个变量相加,javascript,variables,reference,Javascript,Variables,Reference,请看下面的代码。我很难理解其中的一个问题: let sideCount = 0; let mealCount = 0; let itemCount = sideCount + mealCount; const pizzaOrder = ({size, crustType, topping, quantity}) => { quantity = Math.round(parseInt(quantity)); mealCount += quantity; if (to

请看下面的代码。我很难理解其中的一个问题:

let sideCount = 0;
let mealCount = 0;
let itemCount = sideCount + mealCount;

const pizzaOrder = ({size, crustType, topping, quantity}) => {
    quantity = Math.round(parseInt(quantity));
    mealCount += quantity;
    if (topping === "") {
        console.log(`Order: ${quantity} ${size.toTitleCase()} ${crustType.toLowerCase()} crust plain cheese pizza`);
    } else {
        console.log(`Order: ${quantity} ${size.toTitleCase()} ${crustType.toLowerCase()} crust ${topping} pizza`);
    }
    console.log(`Meal Count after ordering ${quantity} pizzas: ${mealCount}`);
    console.log(`Current item count: ${itemCount}`);        
};
(还有更多,但这才是问题的关键)

我在StackOverflow中查找了所有引用和按值传递或按引用传递,但找不到任何解决问题的方法

当我更新
mealCount
时,它不会更改
itemCount
的值。我该如何解决这个问题

Order: 10 Medium thin crust pepperoni pizza 
Meal Count after ordering 10 pizzas: 10 
Current item count: 0 
Order: 3 burgers with Relish 
Meal Count after ordering burger: 13 
Current item count: 0 
Meal Count: 0 Side Count: 0 
Meal Count: 0 
Side Count: 0 
Meal Count: 0 
Side Count: 0 
Your total is $0.00. Enjoy your meal! 
代码按顺序解释(计算)

当你写作时: 让itemCount=边计数+边计数

实际上,您将sideCount+mealCount的值分配给itemCount。此时,sideCount和mealCount的值为“0”,因此itemCount等于“0”

调用函数pizzaOrder并更改mealCount(在该函数中)不会使javascript再次重新计算所提到的行(让itemCount=sideCount+mealCount)

从字面上看,pizzaOrder函数根本不影响变量“itemCount”

一个问题解决方案是添加行: pizzaOrder函数中的“itemCount=sideCount+mealCount”,特别是在“mealCount+=quantity;”行下

因此,您的代码如下所示:

const pizzaOrder = ({size, crustType, topping, quantity}) => {
    quantity = Math.round(parseInt(quantity));
    mealCount += quantity;
    totalCount = mealCount + sideCount;
    if (topping === "") {
        console.log(`Order: ${quantity} ${size.toTitleCase()} ${crustType.toLowerCase()} crust plain cheese pizza`);
    } else {
        console.log(`Order: ${quantity} ${size.toTitleCase()} ${crustType.toLowerCase()} crust ${topping} pizza`);
    }
    console.log(`Meal Count after ordering ${quantity} pizzas: ${mealCount}`);
    console.log(`Current item count: ${itemCount}`);        
};
代码按顺序解释(计算)

当你写作时: 让itemCount=边计数+边计数

实际上,您将sideCount+mealCount的值分配给itemCount。此时,sideCount和mealCount的值为“0”,因此itemCount等于“0”

调用函数pizzaOrder并更改mealCount(在该函数中)不会使javascript再次重新计算所提到的行(让itemCount=sideCount+mealCount)

从字面上看,pizzaOrder函数根本不影响变量“itemCount”

一个问题解决方案是添加行: pizzaOrder函数中的“itemCount=sideCount+mealCount”,特别是在“mealCount+=quantity;”行下

因此,您的代码如下所示:

const pizzaOrder = ({size, crustType, topping, quantity}) => {
    quantity = Math.round(parseInt(quantity));
    mealCount += quantity;
    totalCount = mealCount + sideCount;
    if (topping === "") {
        console.log(`Order: ${quantity} ${size.toTitleCase()} ${crustType.toLowerCase()} crust plain cheese pizza`);
    } else {
        console.log(`Order: ${quantity} ${size.toTitleCase()} ${crustType.toLowerCase()} crust ${topping} pizza`);
    }
    console.log(`Meal Count after ordering ${quantity} pizzas: ${mealCount}`);
    console.log(`Current item count: ${itemCount}`);        
};
如果要保持订单的“状态”,您可能需要使用一个对象,该对象可以在任何需要的地方公开:

const count = {
sideCount: 0,
mealCount: 0,
itemCount() {
    return this.sideCount + this.mealCount
  }
}

const pizzaOrder = ({size, crustType, topping, quantity}) => {
quantity = Math.round(parseInt(quantity));
count.mealCount += quantity;
if (topping === "") {
    console.log(`Order: ${quantity} ${size.toTitleCase()} ${crustType.toLowerCase()} crust plain cheese pizza`);
} else {
    console.log(`Order: ${quantity} ${size} ${crustType.toLowerCase()} crust ${topping} pizza`);
}
console.log(`Meal Count after ordering ${quantity} pizzas: ${count.mealCount}`);
console.log(`Current item count: ${count.itemCount()}`);        
};
console.log(count.itemCount()) // 0

pizzaOrder({size: 'asd', crustType: 'asd', topping: 'asd', quantity: 1})

console.log(count.itemCount()) // 1
正如其他人提到的,你的代码不会那样工作。 希望这对您有所帮助。

如果您想保持订单的“状态”,您可能需要使用一个可以在任何需要的地方公开的对象:

const count = {
sideCount: 0,
mealCount: 0,
itemCount() {
    return this.sideCount + this.mealCount
  }
}

const pizzaOrder = ({size, crustType, topping, quantity}) => {
quantity = Math.round(parseInt(quantity));
count.mealCount += quantity;
if (topping === "") {
    console.log(`Order: ${quantity} ${size.toTitleCase()} ${crustType.toLowerCase()} crust plain cheese pizza`);
} else {
    console.log(`Order: ${quantity} ${size} ${crustType.toLowerCase()} crust ${topping} pizza`);
}
console.log(`Meal Count after ordering ${quantity} pizzas: ${count.mealCount}`);
console.log(`Current item count: ${count.itemCount()}`);        
};
console.log(count.itemCount()) // 0

pizzaOrder({size: 'asd', crustType: 'asd', topping: 'asd', quantity: 1})

console.log(count.itemCount()) // 1
正如其他人提到的,你的代码不会那样工作。
希望这有帮助。

我没有在每个函数中添加
mealCount
,而是在对象中返回
mealCount
sideCount
drinkCount
,如下所示

return {mealCount: quantity};
然后,我在
groupOrder()
函数的
orders
参数上使用了
Array.prototype.reduce()
方法,该函数是您调用的函数,将函数调用数组传递给食品订单,食品订单和价格计算嵌套在其中

let mealCount = orders.reduce((av, cv) => {
    if (cv.hasOwnProperty('mealCount')) {
        return {mealCount: av.mealCount + cv.mealCount};
    }
    return {mealCount: av.mealCount + 0};
}, {mealCount: 0}).mealCount;

我没有在每个函数中添加
mealCount
,而是在对象中返回
mealCount
sideCount
drinkCount
,如下所示

return {mealCount: quantity};
然后,我在
groupOrder()
函数的
orders
参数上使用了
Array.prototype.reduce()
方法,该函数是您调用的函数,将函数调用数组传递给食品订单,食品订单和价格计算嵌套在其中

let mealCount = orders.reduce((av, cv) => {
    if (cv.hasOwnProperty('mealCount')) {
        return {mealCount: av.mealCount + cv.mealCount};
    }
    return {mealCount: av.mealCount + 0};
}, {mealCount: 0}).mealCount;

您是否调用了比萨饼订单函数,然后记录了itemCount?是的,我调用了。它显示为0。在JS中没有像引用变量这样的东西,您所要求的是不可能的。制作一个
itemCount()
函数来计算每次调用的总和。您是否调用了pizza order函数,然后记录了itemCount?是的,我有。它显示为0。在JS中没有像引用变量这样的东西,您所要求的是不可能的。制作一个
itemCount()
函数来计算每次调用的总和。我还有很多其他函数,比如pizza order。这是否意味着我必须把这条线放在他们每个人身上,还是有工作around@Marvin创建一个函数
updateCount
,从每个函数调用:-)您必须(或多或少明确地)每次更改输入值或每次需要输出值时都要重新计算。我还有很多其他函数,比如pizza order。这是否意味着我必须把这条线放在他们每个人身上,还是有工作around@Marvin创建一个函数
updateCount
,从每个函数调用:-)每次更改输入值或每次需要输出值时,您都必须(或多或少明确地)重新计算。对于对象,你甚至可以把它变成一个getter属性。它必须是一个方法吗?我可以把它变成一个属性吗?对于一个对象,你甚至可以把它变成一个getter属性。它必须是一个方法吗?我能把它变成财产吗?