Разрушение назначения в цикле 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
но безрезультатно. Я радикально неправильно понимаю смысл деструктурирования назначения или пропускаю что-то тонкое? Или это ошибка?