인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

liltjay님의 프로필 이미지
liltjay

작성한 질문수

[코드팩토리] [입문] 9시간만에 끝내는 코드팩토리의 Javascript 무료 풀코스

scope에 대해 질문 있습니다.

작성

·

284

·

수정됨

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을 이용한 경우 바뀌지 않은 결과를 보면 알 수 있습니다.

감사합니다!

liltjay님의 프로필 이미지
liltjay

작성한 질문수

질문하기