2017-10-07 147 views
1

新手學生編碼器,打破JavaScript代碼插入功能

這裏和我開發一個程序,可以提醒,一旦你的錢,你給它會計算小費金額類型節目,和稅收來獲得用戶擁有的總金額。我有基本代碼下來,並將其分成功能,但當我把一個數字顯示爲未識別。

這裏是我的代碼:

const TAXRATE=.095 
const TIPRATE=.2 

function foodCharge (foodCharge) { 
    return parseFloat(prompt("please enter the amount")); 
} 
foodCharge(); 

function taxAmount (foodCharge,TAXRATE) { 
    return parseFloat(foodCharge*TAXRATE); 
} 

taxAmount(); 


function subAmount (foodCharge,taxAmount) { 
    return parseFloat(foodCharge+taxAmount); 
} 
subAmount(); 

function tipAmount (TAXRATE,subAmount) { 
    return parseFloat (TAXRATE*subAmount); 
} 
tipAmount(); 


function grandTotal (foodCharge, taxAmount, tipAmount) { 
    return grandTotal=parseFloat(foodCharge+taxAmount+tipAmount) 
} 
grandTotal(); 

function finalCost(foodCharge,taxAmount, tipAmount, grandTotal) { 
    alert ("Meal cost: "+ foodCharge + " \nTax: " + taxAmount + " \nTip: " + 
    tipAmount +" \nGrand total: " + grandTotal); 
} 
finalCost(); 

+0

你的函數的所有期望得到的參數,但是當你打電話給他們,你不傳遞任何參數。另外,除了最後一個函數返回的值,你忽略了。所以當你最後調用'finalCost()'函數時,你不會傳遞任何參數,所以'foodCharge','taxAmount'等都是未定義的。請注意,您已經過度使用了'parseFloat()' - 您需要的唯一地方就是該值是一個字符串,即用戶輸入的值。順便說一句,我已經在你的問題中格式化了代碼,使它更具可讀性(更改空白,不更改實際代碼)。 – nnnnnn

+0

請編輯您的帖子,以便更詳細地描述問題並指出您的問題是什麼,而不是僅僅說出「我找不到問題」,我建議您閱讀SO發佈指南 – shafeen

+0

@shafeen - 爲什麼你會編輯刪除演示片段?此外,OP還說明了問題所在,即結果顯示爲「未定義」 - 運行已刪除的代碼段時很明顯。 – nnnnnn

回答

0

你只需要當你從字符串解析浮點數parseFloat功能。您不需要解析常規數學運算的結果(如果兩個數字都不是字符串)。當您將函數作爲參數傳遞給時,警報()必須用括號括起來,否則您將引用傳遞給函數。

如果我正確理解你的問題,這裏是你的程序:

const TAXRATE=0.095 
const TIPRATE=0.2 


function foodCharge (foodCharge) { 
    return parseFloat(prompt("please enter the amount")); 
} 
var charge = foodCharge(); 


function taxAmount (charge, rate) { 
    return charge*rate; 
} 
var tax = taxAmount(charge, TAXRATE); 


function subAmount (charge,tax) { 
    return charge+tax; 
} 
var amount = subAmount (charge,tax); 


function tipAmount (rate,amount) { 
    return rate*amount; 
} 
var tip = tipAmount(TAXRATE,amount); 


function grandTotal() { 
    return charge+tax+tip; 
} 


function finalCost() { 
    alert ("Meal cost: "+ charge + " \nTax: " + tax + " \nTip: " + amount +" \nGrand total: " + grandTotal()); 
} 
finalCost(); 
0

可以調節功能內finalCost被調用。注意,parseFloat()只需要在foodCharge功能

const TAXRATE = .095 
 
const TIPRATE = .2 
 

 
function foodCharge() { 
 
    return parseFloat(prompt("please enter the amount")); 
 
} 
 

 
function taxAmount(charge, tax) { 
 
    return charge * tax; 
 
} 
 

 
function subAmount(charge, tax) { 
 
    return charge + tax; 
 
} 
 

 
function tipAmount(tip, sub) { 
 
    return tip * sub; 
 
} 
 

 
function grandTotal(charge, tax, tip) { 
 
    return charge + tax + tip; 
 
} 
 

 
function finalCost() { 
 

 
    let _foodCharge = foodCharge(); 
 
    let _taxAmount = taxAmount(_foodCharge, TAXRATE); 
 
    let _subAmount = subAmount(_foodCharge, _taxAmount); 
 
    let _tipAmount = tipAmount(TIPRATE, _subAmount); 
 
    let _grandTotal = grandTotal(_foodCharge, _taxAmount, _tipAmount); 
 

 
    alert("Meal cost: " + _foodCharge + " \nTax: " + _taxAmount + " \nTip: " + 
 
    _tipAmount + " \nGrand total: " + _grandTotal); 
 
} 
 

 
finalCost();

+0

確定要嘗試並分解您的代碼(以便將來更好地理解這一點)....您所做的是創建具有所有原始名稱的函數,然後在括號中添加它自己的變量ex。收費和稅收等,然後爲了將參數傳遞給finalCharge函數,您將分配的費用和稅賦分配給它們各自受尊重的函數ex.let tax = taxAmount(charge,TAXRATE);這就是你如何在函數中傳遞參數 –

+0

@NathanCenter是的。爲避免變量具有相同標識符的問題,帶有'finalCost'的變量以下劃線開頭和下劃線。 – guest271314