title: how to shuffle a deck of cards using Js
body: <p>I searched for how to shuffle a deck of cards that I made and I found these lines but I can't understand...</p>
  
  <ol>
  <li>is (this) that is written in the second line a js keyword or it't just a given name</li>
  <li>how does m stores deck.length + i</li>
  <li>what does m-- means at the end of the sixth line </li>
  <li><p>what is the function of line no.8</p>
  
  <pre><code>shuffle() {
      const { deck } = this;
      let m = deck.length, i;
  
      while (m) {
        i = Math.floor(Math.random() * m--);
  
        [deck[m], deck[i]] = [deck[i], deck[m]];
      }
  
      return this;
    }
  </code></pre></li>
  </ol>
  
  <p>I know it's a lot to ask but I would appreciate your help</p>