ASI (automatic semicolon insertion) fungerar för det mesta bra — jag använder aldrig semikolon i javascript. Ditt kodstycke tolkas däremot så här:
ind = Math.floor(Math.random() * curr--)[deck[curr], deck[ind]] = [deck[ind], deck[curr]]
Du kan lösa det genom att göra platsbytet i tre steg:
1. spara undan värdet på deck[curr] till en temporärvariabel
2. sätt deck[curr] = deck[ind]
3. sätt deck[ind] = temporärvariabel
0 är ett "falsy" värde i javascript, så när curr blir 0 kommer while-loopen avslutas.