2017-05-21 15 views
1

あいまいなタイトルの場合は申し訳ありませんが、1つの文で欲しいものを説明するのは難しいです。私は何をしようとしているのかをあなたに知らせるために最善を尽くします。 私はピザが注文されたもの、税抜きのピザの価格、税込みのピザの価格を返す簡単なプログラムを書いています。 は、ここでのコードです:あなたが見ることができるようにユーザーからの入力に応じて、関数で定義済みの引数を使用する方法

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

 
function getSubTotal (itemCount){ 
 
\t 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です。 しかし、私は今までと同じように3種類のトッピング(ベーコン、ソーセージ、オリーブ)を作りたいと思っています。 これは、ピザの価格がピザに使用されるトッピングの種類によって変わることを意味します。 私はこのコードを試してみましたが、それはうまくいきませんでした:

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

 
function getSubTotal (itemCount){ 
 
\t 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が初めてのので、誰かが私が間違っていることを説明できるかどうか分かります。あなたがtakeOrderを呼び出すと

はあなたに

答えて

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){ 
 
\t 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

をありがとう、あなたは情報をトッピング渡しているが、あなたはどこにでも保存されていません。

getSubTotalを呼び出すと、変数toppingが定義されていないことが判明し、Uncaught ReferenceErrorを取得している必要があります。

あなたは変数だけorderCountよう

var topping, crust; 

を宣言する必要があります。あなたは takeOrder関数を呼び出すときにそれらに値を格納する必要があるため、あなたはこのように機能を変更する必要があり、

また
var orderCount = 0, 
    topping, crust; 

:それはのようになります

function takeOrder(toppingType, crustType) { 
console.log('Order: ' + crustType + ' pizza topped with ' + toppingType); 
orderCount = orderCount + 1; 
topping = toppingType;//store the passed value here 
crust = crustType;//store the passed value here 
} 

そして、それが動作するはずです。

1

上述したように、toppingは未定義の変数です。あなたは関係なく、彼らのトッピングの注文したすべてのピザの総量によって、特定のトッピングの価格を乗じている

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

もう一つの問題は、ここにいることです。だから、もしあなたが3つのベーコンピザと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()); 
関連する問題