• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

scope에 대해 질문 있습니다.

23.08.04 20:49 작성 23.08.04 20:57 수정 조회수 230

0

var i = 999;
for (var i = 0; i < 10; i++) {
  console.log(i);
}
console.log(`i in global scope : ${i}`); // 10
-------------------------------------------------------------------
i = 999;
for (let i = 0; i < 10; i++) {
  console.log(i);
}
console.log(`i in global scope : ${i}`); // 999 

안녕하세요 강의 너무나 잘 듣고 있습니다!
scope에 대해 배웠는데 내용이 헷갈려서 질문을 올리게 되었습니다.

"var은 함수를 선언할 때만 스코프가 생긴다. 블록레벨 에서는 var을 썼을때 새로운 스코프를 만들어내지 않는다. 그래서 global scope인 i가 for으로 바꿔준 값인 10이 출력된다."

라고 하셨는데 이 부분을 계속 돌려보아도 이해가 잘 가지 않습니다..
스코프를 만들지 않는 것과 for에서 10으로 바꿔준 값이 global scope인 i에도 적용이 되는 것과 무슨 상관이 있는 건가요..??

감사합니다!

답변 1

답변을 작성해보세요.

0

안녕하세요!

var 은 매번 글로벌 스코프를 적용하기 때문에 for 룹을 실행할때 글로벌 i 값을 그대로 사용하게 됩니다.

let의 경우 for 룹 안에서 새로운 블록레벨 스코프를 형성하기 때문에 내부 i 값이 새로운 스코프 안에서만 적용됩니다.

룹이 끝난 후 var을 이용한 경우 글로벌 i 값이 변경돼있고 let을 이용한 경우 바뀌지 않은 결과를 보면 알 수 있습니다.

감사합니다!