如何在函数中使用预定义参数,具体取决于用户的输入

时间:2017-05-21 22:41:00

标签: javascript jquery

对于含糊不清的标题道歉,但很难用一句话来解释我想要的东西。我会尽我所能让你知道我想要做什么。 我正在写一个简单的程序,它将返回披萨的订单,不含税的比萨饼的价格和含税的比萨饼的价格。 这是代码:

var orderCount = 0;
function takeOrder (topping, crustType) {
  console.log('Order: ' + crustType + ' pizza topped with ' + topping);
  orderCount = orderCount + 1;
}

function getSubTotal (itemCount){
	return itemCount * 7.5;
}

function getTax() {
  return getSubTotal(orderCount) * (0.06);
}

function getTotal() {
  return getTax() + getSubTotal(orderCount);
}

takeOrder('bacon', 'thin');
console.log(getSubTotal(orderCount));
console.log(getTotal());

takeOrder('sausages', 'thick');
console.log(getSubTotal(orderCount));
console.log(getTotal());

takeOrder('olives', 'medium');
console.log(getSubTotal(orderCount));
console.log(getTotal());

正如您所看到的,无论顶部和外壳,披萨的价格总是相同的。 它总是7.5。 但现在我想制作三种不同的配料(如前所述):培根,香肠和不同价格的橄榄。 这意味着披萨的价格应该根据披萨的顶部使用而改变。 我尝试了这段代码,但它不起作用:

var orderCount = 0;
function takeOrder (topping, crustType) {
  console.log('Order: ' + crustType + ' pizza topped with ' + topping);
  orderCount = orderCount + 1;
}

function getSubTotal (itemCount){
	if (topping === 'bacon') {
  return itemCount * 7.5;
  }
  else if (topping === 'sausages'){
  return itemCount * 6;
  }
  else if (topping === 'olives'){
  return itemCount * 5.5;
  }
  else {
  return ('Topping not available.');
  }
}

function getTax() {
  return getSubTotal(orderCount) * (0.06);
}

function getTotal() {
  return getTax() + getSubTotal(orderCount);
}

takeOrder('bacon', 'thin');
console.log(getSubTotal(orderCount));
console.log(getTotal());

takeOrder('sausages', 'thick');
console.log(getSubTotal(orderCount));
console.log(getTotal());

takeOrder('olives', 'medium');
console.log(getSubTotal(orderCount));
console.log(getTotal());

我想为crustType做同样的事情(根据地壳的类型改变价格),但是现在我只想弄清楚浇头。 如果有人可以解释我做错了什么,我将不胜感激,因为我不熟悉JavaScript。

谢谢

3 个答案:

答案 0 :(得分:2)

你必须保存顶部。

var orderCount = 0;
var topping;
function takeOrder (my_topping , crustType) {
  console.log('Order: ' + crustType + ' pizza topped with ' + topping);
  orderCount = orderCount + 1;
  topping = my_topping ;
}

function getSubTotal (itemCount){
	if (topping === 'bacon') {
  return itemCount * 7.5;
  }
  else if (topping === 'sausages'){
  return itemCount * 6;
  }
  else if (topping === 'olives'){
  return itemCount * 5.5;
  }
  else {
  return ('Topping not available.');
  }
}

function getTax() {
  return getSubTotal(orderCount) * (0.06);
}

function getTotal() {
  return getTax() + getSubTotal(orderCount);
}

takeOrder('bacon', 'thin');
console.log(getSubTotal(orderCount));
console.log(getTotal());

takeOrder('sausages', 'thick');
console.log(getSubTotal(orderCount));
console.log(getTotal());

takeOrder('olives', 'medium');
console.log(getSubTotal(orderCount));
console.log(getTotal());

答案 1 :(得分:1)

当您致电@Override public void run() { byte[] buffer = new byte[1024]; int bytes; while (true) { try { bytes = inputStream.read(buffer); //Received text is here String text = new String(buffer, 0, bytes); Log.d(TAG, text); } catch (IOException e) { e.printStackTrace(); break; } } super.run(); } 时,您正在传递顶部信息,但您没有将其存储在任何地方。

因此,当您致电takeOrder时,发现变量getSubTotal未定义,您必须获得topping

您需要声明变量

Uncaught ReferenceError

就像var topping, crust; 一样。所以看起来应该是这样的:

orderCount

此外,由于在调用var orderCount = 0, topping, crust; 函数时需要将值存储到它们中,因此需要修改如下函数:

takeOrder

然后它应该工作。

答案 2 :(得分:1)

如上所述,topping是未定义的变量。

另一个问题是:

takeOrder('bacon', 'thin');
console.log(getSubTotal(orderCount)); // <<<<
console.log(getTotal());

您将特定浇头的价格乘以所有订购的比萨饼的总量,无论其浇头如何。因此,如果您订购了三个培根比萨饼和一个橄榄披萨,那么当您将橄榄的价格乘以1时,您将橄榄的价格乘以4(比萨饼的总数)。

您可以做的是将配料的价格存储在对象中,并保留每次下订单时添加的税前子总数。然后,当您调用getTax和getTotal时,这些函数将使用该运行子总计来计算其输出的值。

var menuItems = {
  bacon : 7.5,
  sausages : 6,
  olives : 5.5
}

var subTotal = 0;

function takeOrder (topping, crustType) {
  console.log('Order: ' + crustType + ' pizza topped with ' + topping);
  subTotal += menuItems[topping];
}

function getSubTotal() {
  return subTotal
}

function getTax() {
  return getSubTotal() * (0.06);
}

function getTotal() {
  return getTax() + getSubTotal();
}

takeOrder('bacon', 'thin');
console.log(getSubTotal());
console.log(getTotal());

takeOrder('sausages', 'thick');
console.log(getSubTotal());
console.log(getTotal());

takeOrder('olives', 'medium');
console.log(getSubTotal());
console.log(getTotal());