5. Bleep Bleep - reference error


#1


My code passed and I'm allowed to move onto the next lesson, but the console shows this message in red:

ReferenceError: itemCost is not defined

Can someone explain the problem and why I'm passing this lesson anyway?


var cashRegister = {
    total:0,
    //Dont forget to add your property
    add: function(itemCost) {
        this.total +=  itemCost;
        return itemCost;
    },
    lastTransactionAmount: itemCost,
    scan: function(item,quantity) {
        switch (item) {
        case "eggs": this.add(0.98 * quantity); break;
        case "milk": this.add(1.23 * quantity); break;
        case "magazine": this.add(4.99 * quantity); break;
        case "chocolate": this.add(0.45 * 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);

//Void the last transaction and then add 3 instead
cashRegister.voidLastTransaction
cashRegister.scan('chocolate',3);

//Show the total bill
console.log('Your bill is '+cashRegister.total);


#2

var cashRegister = {
    total:0,
    //Dont forget to add your property
    add: function(itemCost) {
        this.total +=  itemCost;
        return itemCost;
    },
    lastTransactionAmount: itemCost, //Your problem lies here

Your problem lies around this area.
You need to store itemCost as lastTransactionAmount....but in this case, it's not doing that.
Your itemCost is only defined in the add function. Hence when you try to do it outside the function, your itemCost is not defined (therefore the error).
Replace your return itemCost; with lastTransactionAmount in your add function and make it:

this.lastTransactionAmount = itemCost;

#3

Hi there and thanks.

That helped but I still had errors. I figured out I also had a problem towards the end:

//Void the last transaction and then add 3 instead
cashRegister.voidLastTransaction
cashRegister.scan('chocolate',3);

and I ended up buying 7 chocolates. To void the previous 4, I simply had to add parenthesis...

cashRegister.voidLastTransaction()

...and it works. Thanks again.


#4

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.