Bonjour,

J'ai un grid avec 42 case et cette fonction me permet de rendre chaque case cliquable.
J'ai suivis un tutoriel pour la réaliser, cependant il y a 1 point que je ne comprend sur la syntaxe.
Pourquoi on ouvre la fonction avec une parenthese ?

J'ai fait une version plus optimisé du même code donc c'est mieux.
Mais j'aurai bien aimé savoir d'ou viens cette syntaxe. Une ancienne version de JavaScript peut etre ?

Merci

for (var i = 0, len = squares.length; i < len; i++)

    (function(index){
        //ajoute un onClick pour chaque case du grid
        squares[i].onclick = function(){
            //Fonction pour ajouter un jeton en verifiant si la case en dessous de la case cliqué contient deja un jeton, et si la case cliqué ne contient pas de jeton.  
            if (squares[index + 7].classList.contains('taken') &&!squares[index].classList.contains('taken')) {
                if (currentPlayer === 1) {
                  squares[index].classList.add('taken')
                  squares[index].classList.add('player-one')
                  //Change de joueur
                  currentPlayer = 2
                  displayCurrentPlayer.innerHTML = currentPlayer
                } else if (currentPlayer == 2){
                  squares[index].classList.add('taken')
                  squares[index].classList.add('player-two')
                  //Change de joueur
                  currentPlayer = 1
                  displayCurrentPlayer.innerHTML = currentPlayer        
                } 

              }  
              //Créer une alerte si le jouer place le jeton dans un endroit sans jetons en dessous
              else alert('Vous ne pouvez pas jouer ici vous devez recommencer')
            } 
    })(i)

//!!!! Version Optimiser du meme code !!!!
  for (let i = 0; i < squares.length; i++) {
    squares[i].onclick = () => {

      if (squares[i + 7].classList.contains('taken') &&!squares[i].classList.contains('taken')) {
        if (currentPlayer == 1) {
          squares[i].classList.add('taken')
          squares[i].classList.add('player-one')
          currentPlayer = 2
          displayCurrentPlayer.innerHTML = currentPlayer
        } else if (currentPlayer == 2){
          squares[i].classList.add('taken')
          squares[i].classList.add('player-two')
          currentPlayer = 1
          displayCurrentPlayer.innerHTML = currentPlayer        
        } 
      } else alert('cant go here')
      checkBoard()
    }
  }

2 réponses


La fonction entre parenthèse?

Alors ça dépends, quand tu dev le code tu ne fais jamais ça, par contre certaines fontions vont se mettre entre parenthèse quand tu va compiler ton code (en gros les anciennes version des navigateurs ne comprennent pas la nouvelle syntaxe, du coup faur passer par Babbel pour transformer le code en ancienne syntaxe que tous les navigateurs comprennent)

Ensuite le compilateur pourquoi il met des parenthèses? Ca je sais pas :/

Hello, c'est ce qu'on appel une IIFE (Immediately Invoked Function Expression) , pour la faire courte une fonction qui est executé des sa définition.

https://developer.mozilla.org/fr/docs/Glossary/IIFE