A atribuição de desestruturação no loop while na função ES6 não se propaga fora do loop?

Eu estava implementando um algoritmo GCD simples no ES6 (através do node-esml) e me deparei com um comportamento estranho ao atualizar valores de variáveis dentro de um loop while. Este código funciona de maneira fantástica:

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

Retornando a resposta esperada de1. No entanto, se eu remover a variável temporária e usar a atribuição de desestruturação para tentar obter os mesmos 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))

Ele nunca é concluído, a depuração adicional mostra que r sempre terá o primeiro valor atribuído,x. Parece que essas duas implementações devem ser idênticas? VejoTrocando variáveis

Eu também tentei usarvar ao invés delet para nenhum proveito. Estou drasticamente entendendo mal o ponto de destruir a tarefa ou perder algo sutil? Ou seria um inseto?

questionAnswers(1)

yourAnswerToTheQuestion