###### tags: `JS學徒特訓班`
# Day10 函式參數設計
隔日早晨,小杰前往老先生家裡的路上,心裡越想越不對。
為什麼老闆會准特休,放他去一個素未謀面的老先生家裡去特訓。早知道就不要跟老先生打賭,說什麼只要老闆允許請假,就答應特訓的請求!浪費了僅有的特休,小杰感到懊惱又無奈,只能安慰自己走一步算一步。
過沒半晌,小杰來到了老先生家裡,外牆上的招牌上寫著「**Java Script 補習班**」,等等..「Java Script」?為什麼中間會有空白,難不成我一直搞錯「JavaScript」的真正拼法..?
進入大廳有個圓形長桌,同時擺放了許多 Windows 老舊筆電,桌面上相當雜亂,有著刻意排出金字塔的玻璃能量飲料,而且還有各種明顯過時的書籍,例如「**Java 實戰 - 王者歸來**」、「**Java 之你不可不學的一百零八式**」,裡面還夾了些讓人匪夷所思的照片,例如下張。

最後小杰目光看到了一幅相框,是 2 人在餐廳的合照,手上共同拿著「鴻圖大展」的匾額。左邊明顯是年輕時的老先生,右邊的男性越看越眼熟,但卻一直無法聯想起來。
老先生:「少年,你來了,那我們就開始吧!」
小杰嚇了一跳,老先生不知何時已經坐在旁邊,並已經開啟電腦準備待續。
老先生:「我看過你第五關寫的 code 了,雖然比不上我當年,但還算差強人意!」
小杰:「謝謝讚美...咦老先生為什麼你看過—」
老先生:「叫我師父!特訓已經開始了,來吧!」
## 第一題:客戶詢價函式,來更多個客人也不怕
請看完[函式教學影片](https://hackmd.io/@YmcMgo-NSKOqgTGAjl_5tg/Sk-_oGL2U/%2F6zQ3SasRR2GR-F3FW8SYVw)後,觀看下面截圖,請改設計一個詢價用的函式,並新增三個參數,依序為客戶姓名、薯條數量,漢堡數量。

同時來了三個客戶,請執行三次函式回報結果。
## 第二題:好多客戶都在問小杰,他們錢包剩下多少錢,小杰表示無言
下面截圖,請改設計一個查詢客戶錢包餘額用的函式,並新增四個參數,依序為客戶姓名、客戶錢包總額、薯條數量,漢堡數量。
同時來了三個客戶,請執行三次函式回報結果。

## 第三題:好多人都擁有九折優惠券
這一題,換您來設計函式與參數看看。
突然間同時來了三個客戶,請執行三次函式回報結果。

***
## 解答
```javascript=
//共用 - 金額函式
var hamburgerPrice = 50;
var friesPrice = 40;
function price(friesNum, hambNum)
{
return friesNum * friesPrice + hambNum * hamburgerPrice;
};
//共用 - 結果函式
function getResult(name, money)
{
if(money >= 0)
{
console.log(`${name} 買完東西後,錢包剩下 ${money} 元`);
}
else
{
//console.log(`${name} 您好,你所帶的金額不足,還差 ${-1 * money} 元`);
console.log(`${name} 您好,你所帶的金額不足,還差 ${Math.abs(money)} 元`);
}
};
//第一題:客戶詢價函式,來更多客人也不怕
function askPrice(name, friesNum, hambNum)
{
total = price(friesNum, hambNum);
console.log(`${name} 您好,您詢問的金額總計為 ${total} 元`);
};
askPrice('Bob', 2, 2);
//Bob 您好,您詢問的金額總計為 180 元
askPrice('Mark', 10, 2);
//Mark 您好,您詢問的金額總計為 500 元
askPrice('Mary', 4, 7);
//Mary 您好,您詢問的金額總計為 510 元
//第二題:好多客戶都在問小杰,他們錢包剩下多少錢,小杰表示無言
function generalCalculation(name, wallet, friesNum, hambNum)
{
total = price(friesNum, hambNum);
var spread = wallet - total;
getResult(name, spread);
};
generalCalculation('Jack', 2000, 2, 7);
//Jack 買完東西後,錢包剩下 1570 元
generalCalculation('John', 3400, 8, 2);
//John 買完東西後,錢包剩下 2980 元
generalCalculation('Susan', 100, 5, 8);
//Susan 您好,你所帶的金額不足,還差 500 元
//第三題:好多人都擁有九折優惠券
var hamburgerPrice = 50;
var friesPrice = 40;
var sale = 0.9;
function discountCalculation(name, wallet, friesNum, hambNum)
{
total = price(friesNum, hambNum) * sale;
var spread = wallet - total;
getResult(name, spread);
};
discountCalculation('JavaScript', 1000, 10, 10);
//JavaScript 買完東西後,錢包剩下 190 元
discountCalculation('CSharp', 1200, 20, 30);
//CSharp 您好,你所帶的金額不足,還差 870 元
discountCalculation('Python', 142, 20, 30);
//Python 您好,你所帶的金額不足,還差 1928 元
```
***
## 進階解答 - 利用 class 建立了店家模組可提供商品價格、優惠折扣
```javascript=
class Store {
constructor(data) {
this.friesPrice = data.friesPrice;
this.hamburgerPrice = data.hamburgerPrice;
this.sale = data.sale;
this.getPrice = function(friesNum, hambNum) {
return (this.friesPrice * friesNum + this.hamburgerPrice * hambNum) * this.sale;
};
this.askPrice = function(name, friesNum, hambNum) {
let price = this.getPrice(friesNum, hambNum);
console.log(`${name} 您好,您詢問的金額總計為 ${price} 元`);
};
this.balance = function(name, wallet, friesNum, hambNum) {
var result = wallet - this.getPrice(friesNum, hambNum);
if(result >= 0) console.log(`${name} 買完東西後,錢包剩下 ${result} 元`);
else console.log(`${name} 您好,你所帶的金額不足,還差 ${Math.abs(result)} 元`);
};
};
};
//第一題
var q1Store = new Store({
friesPrice: 40,
hamburgerPrice: 50,
sale: 1,
});
q1Store.askPrice('Bob', 2, 2);
//Bob 您好,您詢問的金額總計為 180 元
q1Store.askPrice('Mark', 10, 2);
//Mark 您好,您詢問的金額總計為 500 元
q1Store.askPrice('Mary', 4, 7);
//Mary 您好,您詢問的金額總計為 510 元
//第二題
var q2Store = new Store({
friesPrice: 40,
hamburgerPrice: 50,
sale: 1,
});
q2Store.balance('Jack', 2000, 2, 7);
//Jack 買完東西後,錢包剩下 1570 元
q2Store.balance('John', 3400, 8, 2);
//John 買完東西後,錢包剩下 2980 元
q2Store.balance('Susan', 100, 5, 8);
//Susan 您好,你所帶的金額不足,還差 500 元
//第三題
var q3Store = new Store({
friesPrice: 40,
hamburgerPrice: 50,
sale: 0.9,
});
q3Store.balance('JavaScript', 1000, 10, 10);
//JavaScript 買完東西後,錢包剩下 190 元
q3Store.balance('CSharp', 1200, 20, 30);
//CSharp 您好,你所帶的金額不足,還差 870 元
q3Store.balance('Python', 142, 20, 30);
//Python 您好,你所帶的金額不足,還差 1928 元
```