Разрушение назначения в цикле while в функции ES6 не распространяется из цикла?

Я реализовывал простой алгоритм GCD в ES6 (через node-esml) и натолкнулся (на меня) на странное поведение с обновлением значений переменных внутри цикла while. Этот код работает фантастически:

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

Возвращая ожидаемый ответ1, Однако, если я удаляю временную переменную и вместо этого использую назначение деструктуризации, чтобы попытаться достичь тех же результатов:

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

Это никогда не завершается, дальнейшая отладка показывает, что r всегда будет иметь первое назначенное значение,x, Кажется, что эти две реализации должны быть идентичны? увидетьОбмен переменных

Я также пытался с помощьюvar вместоlet но безрезультатно. Я радикально неправильно понимаю смысл деструктурирования назначения или пропускаю что-то тонкое? Или это ошибка?

Ответы на вопрос(1)

Ваш ответ на вопрос