¿La asignación de estructura en el ciclo while en la función ES6 no se propaga fuera del ciclo?

Estaba implementando un algoritmo GCD simple en ES6 (a través de node-esml) y encontré (para mí) un comportamiento extraño con la actualización de los valores de las variables dentro de un ciclo while. Este código funciona fantásticamente:

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))

Devolviendo la respuesta esperada de1. Sin embargo, si elimino la variable temporal y en su lugar uso la asignación de desestructuración para tratar de lograr los mismos resultados:

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))

Nunca se completa, la depuración adicional muestra que r siempre tendrá el primer valor asignado a,x. Parece que estas dos implementaciones deberían ser idénticas? verIntercambio de variables

También he intentado usarvar en lugar delet en vano. ¿Estoy malentendiendo drásticamente el punto de desestructuración de la tarea o me falta algo sutil? O se trata de un error?

Respuestas a la pregunta(1)

Su respuesta a la pregunta