Destructuring-Zuweisung in while-Schleife in ES6-Funktion wird nicht aus der Schleife übernommen?

Ich implementierte einen einfachen GCD-Algorithmus in ES6 (durch node-esml) und fand (für mich) ein merkwürdiges Verhalten beim Aktualisieren von Variablenwerten in einer while-Schleife. Dieser Code funktioniert fantastisch:

function gcdWithTemp(x, y) {
  let [r, rdash] = [x, y]
  while (r != 0) {
    q = Math.floor(rdash / r)
    temp = r
    r = rdash - q * r
    rdash = temp
  }
  return(rdash)
}
console.log(gcdWithTemp(97, 34))

Wiedergabe der erwarteten Antwort von1. Wenn ich jedoch die temporäre Variable entferne und stattdessen die destrukturierende Zuweisung verwende, um die gleichen Ergebnisse zu erzielen:

function gcdWithDestructuredAssignment(x, y) {
  let [r, rdash] = [x, y]
  while (r != 0) {
    q = Math.floor(rdash / r)
    [r, rdash] = [rdash - q * r, r]
  }
  return(rdash)
}
console.log(gcdWithDestructuredAssignment(97, 34))

Er wird nie beendet, weitere Fehlerbehebung zeigt, dass r immer den ersten zugewiesenen Wert hat,x. Es scheint, dass diese beiden Implementierungen identisch sein sollten? sehen Variablen tauschen

Ich habe auch versucht mitvar Anstatt vonlet umsonst. Verstehe ich den Punkt, an dem es darum geht, Aufgaben zu zerstören, drastisch falsch oder vermisse ich etwas Feines? Oder ist es ein Fehler?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage