-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
예시 코드 질문이 있습니다.
22.01.04 17:45 작성 조회수 158
0
안녕하세요!! 질문이 있습니다. 선언을 var로 했을때는 이해가 됐는데 만약에 선언을 let으로 하고 inner 함수 안에는 재선언이 불가능하므로 a = 3; 이렇게 했을 때 값 출력이 1 1 3 3 이 순서로 나오더군요 inner 함수안에서 a = 3 값을 선언했는데 어떻게 마지막 a 값이 1이 아닌 3이 찍히는 건지 궁금합니다!
let a = 1;
function outer(){
console.log(a); // 1 콘솔 출력 순위
function inner(){
console.log(a); // 2
a = 3;
}
inner();
console.log(a); // 3
}
outer();
console.log(a); // 4
답변을 작성해보세요.
1
정재남
지식공유자2022.01.04
질문 내용상으로는 'var를 let으로 바꾸니 동작이 달라졌다'고 하신 것 같지만,
실제로는 제시해주신 코드의 let을 var로 바꿔보셔도 결과는 똑같이 나옵니다.
즉 선언 형식이 let이든 var이든 무관한 내용입니다.
- '함수 안에는 재선언이 불가능하므로' 라는게 어떤 말씀이신지 모르겠습니다.
- 'inner 함수안에서 a = 3 값을 '선언' 한게 아니라, a라는 변수에 값 3을 '할당'했을 뿐입니다.
- inner 함수에서 '선언'된 변수가 없으니, 스코프체인을 따라 선언된 변수 a를 찾아나가다가,
전역공간에 선언된 변수 a에 할당하게 됩니다.
let은 es6에서 도입된 것으로 본 강의는 다루지 않는 내용입니다.
var, let, const의 차이를 정확히 알고 싶으시면 ES6를 별도로 공부하시길 바랍니다.
rlaxogud2111
2022.01.04
제가 질문을 잘못 물어본 거 같습니다.
정리하자면 inner 함수안에서 a 값을 '재할당'을 했을 때 그게 전역공간에 있는 a값도 영향을 받는지가 궁금했습니다.
답변 1