ES6에서 (node-esml을 통해) 간단한 GCD 알고리즘을 구현하면서 while 루프 내의 변수 값을 업데이트하는 이상한 동작이 발생했습니다. 이 코드는 환상적으로 작동합니다ES6 함수에서 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
의 예상 답을 반환. 나는 임시 변수를 제거하고 대신 같은 결과를 시도하고 달성하기 위해 destructuring 할당을 사용하는 경우, : 그것은 완료하지
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
에 할당 된 첫 번째 값을있을 것이라는 점을 보여줍니다. 이 두 구현은 동일해야합니다. Swapping variables
또한 대신 let
을 사용하지 않으려 고 시도했습니다. 구조 조정 임무를 잘못 이해했거나 뭔가 미묘한 부분을 빠뜨린 것입니까? 아니면 버그입니까?
당신의'q'와'temp' 변수는 [암시 적으로 전역 적입니다] (http://blog.niftysnippets.org/2008/03/horror-of-implicit-globals.html). 엄격 모드를 사용하십시오! – Bergi
Btw,'function gcd (r, rdash) {'를 쓰고'let [r, rdash] = [x, y]'를 생략하면 어떨까요? – Bergi