¿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?