2017-07-30 135 views
0

我是Javascript的新手,我不確定爲什麼我的代碼有效。 我通過Codecademy這裏學習是我的代碼:Javascript邏輯誤解

var orderCount = 0 
function takeOrder(topping, crustType) { 
    orderCount = orderCount + 1; 
    console.log('Order: ' + crustType + ' pizza topped with ' + topping); 
    console.log(getSubTotal(orderCount)); 
} 
function getSubTotal(itemCount) { 
    return itemCount * 7.5 
} 
takeOrder('peperoni', 'thin'); 
takeOrder('extra Cheese', 'medium') 
takeOrder('Bacon', 'EXTRA THICK') 

我得到我想要的輸出,這就是:

訂單:介質:薄比薩佩佩羅尼 7.5

訂單突破披薩配上額外奶酪15

訂購:帶培根的超厚比薩餅 22.5

但是爲什麼? Javascript如何知道代碼中有多少訂單?
我的猜測是,由於orderCount = orderCount + 1;和:

takeOrder('peperoni', 'thin'); 
takeOrder('extra Cheese', 'medium'); 
takeOrder('Bacon', 'EXTRA THICK'); 

但是,我真的不知道。我寧願知道爲什麼我的代碼工作:)

+1

Javascript使用類似於c或java的範圍系統。您的orderCount變量位於全局範圍內,因此所有函數都可以訪問orderCount變量。你可以參考https://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in-javascript – David

回答

0

簡而言之您正在使用共享變量,如本地存儲,以在功能之間傳遞數據。請閱讀variable scoping in javascrpt瞭解更多信息。

orderCount變量具有全局範圍。所以你可以從任何函數訪問它(類似java/C中的靜態變量)。每次執行takeOrder函數時,都會將此變量加1。 當您執行getSubTotal函數時,您正在讀取它的值和打印訂單總價。

您的方案: 隨着第一takeOrder執行已增加orderCount爲1,然後是2和3。當您執行getSubTotal functinon時,您正在讀取您的全局變量值(3)並計算總價格。

提示: 當你將繼續你的教程中,您將學習,這是更好地包裝對象內這兩種方法,並添加變量此對象的內部,而不是全局變量。因爲你擁有更多的全局變量,所以變得更難與它們一起工作。

1
var orderCount = 0 

您與0初始化orderCount

function takeOrder(topping, crustType){ 
    orderCount = orderCount + 1; 
    /* more code here */ 
    } 

每次這個函數被調用,+1orderCount

takeOrder('peperoni', 'thin'); 

電流orderCount = 0takeOrder被調用,所以orderCount = 0 + 1

takeOrder('extra Cheese', 'medium'); 

電流orderCount = 1takeOrder被再次調用,所以orderCount = 1 + 1

takeOrder('Bacon', 'EXTRA THICK') 

當前orderCount = 2,takeOrder再次被調用,所以orderCount = 2 + 1

由於您調用了該函數3次,最終的orderCount3