lundi 10 août 2020

toggling variable inside Module Pattern using function declaration vs function expression

I have a module pattern with a variable setting the currentPlayer to 1. I use a function expression to toggle that variable

 const game = (() => {
    let currentPlayer = 1;

    const toggleCurrentPlayer = () => {
        if (currentPlayer == 1){
            currentPlayer = 2 ;
        }
        else {
            currentPlayer = 1;
        }
    };
    return {currentPlayer, toggleCurrentPlayer};
})();

If I run game.currentPlayer it logs 1, I then run game.toggleCurrentPlayer(), and it doesn't change currentPlayer as intended, it still returns 1.

However, changing the toggleCurrentPlayer() function using this, seems to be able to change the variable successfully

function toggleCurrentPlayer(){
    if (this.currentPlayer == 1){      
        this.currentPlayer=2;
    }
    else if (this.currentPlayer == 2){
        this.currentPlayer=1;
    }
};

I know function declarations and function expressions have different meanings for the keyword this, but why would the toggleCurrentPlayer() only work properly with the this keyword and not be able to set the variable on its own?

Aucun commentaire:

Enregistrer un commentaire