5/7 this is weird


#1

var cashRegister = {
    total:0,
    //Dont forget to add your property
    lastTransactionAmount: 0,
    add: function(itemCost) {
        this.total +=  itemCost;
    },
    scan: function(item,quantity) {
        switch (item) {
        case "eggs": this.add(0.98 * quantity); 
        lastTransactionAmount = (0.98 * quantity); 
        break;
        case "milk": this.add(1.23 * quantity); 
        lastTransactionAmount = (1.23 * quantity);
        break;
        case "magazine": this.add(4.99 * quantity); 
        lastTransactionAmount = (4.99 * quantity);
        break;
        case "chocolate": this.add(0.45 * quantity); 
        lastTransactionAmount = (0.98 * quantity);
        break;
        }
        return true;
        },
    //Add the voidLastTransaction Method here
    voidLastTransaction: function()
    {
        this.total -= this.lastTransactionAmount
    }
};
cashRegister.scan('eggs',1);
cashRegister.scan('milk',1);
cashRegister.scan('magazine',1);
cashRegister.scan('chocolate',4);
console.log(cashRegister.lastTransactionAmount);
//Void the last transaction and then add 3 instead
//Show the total bill
console.log('Your bill is '+cashRegister.total);

I added console.log to check if the last transaction was properly stored.
but when I click save, lastTransactionAmount's value is 0.

WHY?


#2

Out of scope

lastTransactionAmount is not cashRegister.lastTransactionAmount

this.lastTransactionAmount is cashRegister.lastTransactionAmount


#3

Actually, they are both in the same scope, just different context.

Edit.

to clarify, let's declare a global...

var lastTransactionAmount;

Now both objects have a lastTransactionAmount property.

console.log(window.lastTransactionAmount);        // undefined
console.log(cashRegister.lastTransactionAmount);  // 3.92

Both are in global scope.