2017-07-30 77 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