새해를 맞아 새로운 마음으로 하루에 한시간씩 알고리즘을 공부하기로 마음먹고 제일 간단한 것부터 시작했음. 첫 문제는 두 수의 합을 구하는 문제였는데 바로 막힘
Restrictions
50,000 ≤ num1 ≤ 50,000
50,000 ≤ num2 ≤ 50,000
return sum;
^
ReferenceError: sum is not defined
function solution(num1, num2) {
if ( (num1>=-50000) && (num2>=-50000) ) {
if ( (num1<=50000) && (num2<=50000) ) {
const sum = num1 + num2
} else {
return "숫자가 올바르지않습니다."
}
}
return sum;
}
- 조건문 변경
어딘가에서 if 안에 && 을 넣어서 여러 조건을 하면 안된다는 말을 들은 적이 있는 기억이 나서 if 한개에 하나의 조건만 걸어보았지만 안됬음.
- return 위치 변경
오류코드에서 return sum 에 문제가 있다고 되어 있어 return sum의 위치가 문제인가 싶어 이리 저리 옮겨봤지만 안됬음 사실 이때 가장 안쪽의 if 내부, const 바로 아래에 옮겼다면 해결되었겠지만 그렇게 하지않아서 계속 안되었음.
- const 변경
const가 let 이 아니라서 그런가 싶어 바꿔봤지만 안됬음. 사실 이때까지만 해도 ReferenceError 를 보지않아서 변수 sum이 정의되지않았다는 내용을 알지 못했음.
전날에 자바스크립트 기초를 다시 공부하던 중에 const, let, var 에 대해서 공부했었던 터라 자꾸 const 에 집착했음.
혹시 변수 바깥에서 접근 가능한 var 를 쓰면 되지않을까 하고 var 로 바꿨는데 해결함.
두번째 if 안에서 const로 선언한 sum이 if문 내에서 종속되었기 때문에 return문을 두번째 if 내부에서만 사용해야한다. 내가 정확히 이해한게 맞는지 확인해보기 위해서 추가 실험을 해봤음.
함수 외부에 변수들을 선언하면 어떻게 될까?
위부분에 추가해보았다.
let num1, num2 = 0;
const sum = 0;
function solution(num1, num2) {
if ( (num1>=-50000) && (num2>=-50000) ) {
if ( (num1<=50000) && (num2<=50000) ) {
sum = num1 + num2
} else {
return "숫자가 올바르지않습니다."
}
}
return sum;
}
이것에 대한 결론은 문제없음 이었다. 그러면 이 상태에서 맨 위에 선언한 것들을 지우면 오류가 날까 싶어서 지워봤다.
이것도 문제없이 된다. 그러면 여기서 생기는 의문. 두번째 if 내부에 있는 num1, num2은 function solution(num1, num2)로 선언했다고 하더라도 sum은 아무것도 안붙었는데 무엇으로 선언한걸까? return sum이 if 외부에 있는 것으로 봐서는 javascript 내부에서 자동으로 var 로 선언되었다고밖에 생각할 수 없다. 왜냐하면 const나 let으로 선언하면 return을 내부에 넣어주어야하니까.
최근에 공부한 함수 스코프와 블록 스코프에 대한 내용이 여기서 도움이 되었던 것같다.
참고자료 :
함수스코프와 블록스코프
https://soldonii.tistory.com/63
자바스크립트 자동 변수 선언이 var이다.
https://bearcomputer.tistory.com/25
I was impressed by the author's chat gpt login ability to take a complex topic and make it accessible to readers of all backgrounds and levels of expertise.