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?