Javascript逻辑误解

时间:2017-07-30 16:46:27

标签: javascript

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

但是,我真的不确定。我非常想知道为什么我的代码有效:)

2 个答案:

答案 0 :(得分:1)

    var orderCount = 0

您使用orderCount初始化0

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

每次调用此函数时,+1orderCount

    takeOrder('peperoni', 'thin');

当前orderCount = 0takeOrder被调用,因此orderCount = 0 + 1

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

当前orderCount = 1,再次调用takeOrder,因此orderCount = 1 + 1

    takeOrder('Bacon', 'EXTRA THICK')

当前orderCount = 2,再次调用takeOrder,因此orderCount = 2 + 1

由于您调用该函数3次,因此最终orderCount3

答案 1 :(得分:0)

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

orderCount变量具有全局范围。所以你可以从任何函数访问它(比如java / C中的静态变量)。每次执行takeOrder函数时,您都将此变量递增1。 当您执行getSubTotal功能时,您正在读取它的值和打印订单总价。

您的方案: 执行第一个takeOrder后,您将orderCount增加到1,然后是2和3.当您执行getSubTotal功能时,您正在读取全局变量值(3)并计算总价

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