Bleep Bleep - Why do we use "-="?


#1



https://www.codecademy.com/en/courses/close-the-super-makert/0/5?curriculum_id=506324b3a7dffd00020bf661#

Just finished the bleep bleep lesson, during the voidLastTransaction method, i original used "this.total - this.lastTransactionAmount", but i got an error that said "oops try again, false".

Looking on the message boards i found out that we use a "-=", but I'm not sure why? The instructions state "Add a method called voidLastTransaction that subtracts the last amount transacted from total" and surely using just a minus sign does this?

Any help to make me understand would be great, thanks.


 voidLastTransaction: function() {
        this.total -= this.lastTransactionAmount;
    }
Replace this line with your code.


#2

@tagcoder00645,
The code

this.total -= this.lastTransactionAmount;

is the short-cut for

this.total  = this.total - this.lastTransactionAmount;

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators


#4

Thanks, that makes so much more sense to me now.

One more question (as you seem to be the guy!) in the final code for the project, it seems like codecademy have added a few bits of extra code with stating why, one bit is:

add: function(itemCost){
this.total += (itemCost || 0);

In the lesson we just put item cost, why have they added "or 0" and what does is it telling the code to do? Thanks.


#5

@tagcoder00645,
First of all
you have to understand that
if you use

add: function(itemCost) {
      this.total += (itemCost || 0);
      }

then itemCost is a parameter
which will be used as a =local= variable in the closure of the function.

If the function is called
you normally provide it with an argument like

add(4.95);

and the 4.95 is used as the number Value of your itemCost variable
thus this.total will be =incremented= by 4.95.

-----------------------------------------------------------------------------------

Now if the add function would be called =without= providing an argument
like

add()

the =local= variable itemCost would have a Value undefined
and this would cause a problem when you tried to
increment this.total with undefined.

Now using

 (itemCost || 0)

you use the speciality of the OR operator
Returns expr1 if expr1 is greater than 0 =or=if it can be converted to true;
otherwise, returns expr2.
Thus as itemCost was undefined
itemCost will take on the number Value`_ 0

==============================================

From
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators

Logical OR (||) expr1 || expr2 

Returns expr1 if it can be converted to true; otherwise, returns expr2. 

Thus, when used with Boolean values, || returns true if either operand is true; if both are false, returns false.

#6

@tagcoder00645,

the FUNCTION talk

var myFunc = function( param1, param2) {
       //Begin of  anonymous FUNCTION-BODY
       //VARIABLE -myFunc- has an -anonymous function- assigned
       //this -anonymous function- has 2 PARAMETERS param1 and param2
       //param1 and param2 PARAMETERS are used 
       //as -local- VARIABLES throughout the FUNCTION-BODY

      console.log( param1 + " and " + param2 ) ;

      //End of anonymous FUNCTION-BODY
};

If you want to call/execute the anonymous function
you will have to add a pair of parentheses to the variable myFunc
like
myFunc();
As the anonymous function was defined
as having 2 parameters
you have to provide 2 arguments
in our case 2 string VALUES "Alena" and "Lauren"
like
myFunc("Alena","Lauren");

some quotes from the outer-world:

**argument is the value/variable/reference being passed in,
parameter is the receiving variable used within the function/block**

OR

**"parameters" are called "formal parameters",
while "arguments" are called "actual parameters".**

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

function with 1 parameter using return-statement

var myFunction = function( param1 ) {
       //Begin of FUNCTION-BODY
       //myFunction =function= has 1 PARAMETER param1
       //this param1 PARAMETER is used as a -local- VARIABLE
       //throughout the FUNCTION-BODY

      return param1;

      //End of FUNCTION-BODY
      };

you have defined a myFunction function
which takes 1 parameter param1
this param1 parameter is used
as a variable throughout the FUNCTION-BODY.

If you want to call/execute this myFunction function
and this myFunction function was defined
as having 1 parameter param1
you will have to provide 1 argument
in our case a "number VALUE" 4
myFunction( 4 );

some quotes from the outer-world:

**argument is the value/variable/reference being passed in,
parameter is the receiving variable used within the function/block**

OR

**"parameters" are called "formal parameters",
while "arguments" are called "actual parameters".**

============================================

As you are using the return-statement in your myFunction function
you will only get a return-value no-display.
You can however capture this return-value in a variable
and then use the console.log()-method to do a display.

var theResult = myFunction( 4 );
console.log( theResult );

OR directly

console.log( myFunction( 4 ) );