我是Javascript的新手,我不确定为什么我的代码有效。 我通过Codecademy学习,这是我的代码:
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');
但是,我真的不确定。我非常想知道为什么我的代码有效:)
答案 0 :(得分:1)
var orderCount = 0
您使用orderCount
初始化0
。
function takeOrder(topping, crustType){
orderCount = orderCount + 1;
/* more code here */
}
每次调用此函数时,+1
为orderCount
。
takeOrder('peperoni', 'thin');
当前orderCount
= 0
,takeOrder
被调用,因此orderCount
= 0 + 1
takeOrder('extra Cheese', 'medium');
当前orderCount
= 1
,再次调用takeOrder
,因此orderCount
= 1 + 1
takeOrder('Bacon', 'EXTRA THICK')
当前orderCount
= 2
,再次调用takeOrder
,因此orderCount
= 2 + 1
由于您调用该函数3次,因此最终orderCount
为3
。
答案 1 :(得分:0)
简而言之您正在使用共享变量(如本地存储)在函数之间传递数据。请阅读variable scoping in javascrpt了解更多信息。
orderCount
变量具有全局范围。所以你可以从任何函数访问它(比如java / C中的静态变量)。每次执行takeOrder
函数时,您都将此变量递增1。
当您执行getSubTotal
功能时,您正在读取它的值和打印订单总价。
您的方案:
执行第一个takeOrder
后,您将orderCount
增加到1,然后是2和3.当您执行getSubTotal
功能时,您正在读取全局变量值(3)并计算总价
提示强>: 当您继续学习本教程时,您将了解最好将两个方法都包装在对象中,并将变量添加到此对象中,而不是全局变量中。因为你拥有更多的全局变量,所以变得更难以使用它们。