我是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');


但是,我真的不确定。我宁愿知道为什么我的代码可以工作:)

最佳答案

简而言之,您正在使用共享变量(例如本地存储)在函数之间传递数据。请阅读有关variable scoping in javascrpt的更多信息。

orderCount变量是全局范围的。因此,您可以从任何函数(类似于java / C中的静态变量)访问它。每次执行takeOrder函数时,都会将此变量加1。
当执行getSubTotal功能时,您正在读取它的值和打印订单的总价。

您的情况:
第一次执行takeOrder时,您已将orderCount递增到1,然后是2和3。执行getSubTotal函数时,您正在读取全局变量值(3)并计算总价。

小费:
当您继续学习本教程时,您将了解到最好将两个方法都包装在一个对象中,然后将变量添加到该对象内,而不是全局变量。因为您拥有更多的全局变量,所以使用它们变得更加困难。

09-18 12:19