-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
일반적인 for 문 에서도 i 는 독립적인 block scope를 가지는게 아닐까요?
19.06.07 17:09 작성 조회수 136
0
우선 감사말씀 드립니다. 정말 좋은 강의를 제공해주셔서 잘 듣고 있습니다. 감사합니다.
충돌하는 개념이 있어서 문의드립니다.
지난번 let 강의 질문에서 하기와 같은 답변을 주셨습니다.
// 답변 내용
for문에서 i 값이 변경되는 매 루프마다 각각 새로운 블록스코프가 형성됩니다.
즉 아래와 같은 내용이 반복되는 형태로 생각하면 됩니다.
for (let i = 0; i < 10; i++) {
funcs.push(function() {
console.log(i)
})
}
// ==================
{
let i = 0;
funcs.push(function(){ console.log(i); });
}
{
let i = 1;
funcs.push(function(){ console.log(i); });
}
{
let i = 2;
funcs.push(function(){ console.log(i); });
}
...
// 질문내용
지난번 답변에 기반하면 아래와 같은 질문이 생기네요
각 i 도 결국 독립적인 block scope 를 가지게 되면서 오류가 안나야 하지 않을까 하는 생각이 듭니다.(물론 오류가 나도록 하는게 더 적절하다고 생각합니다. 그리고 JS 엔진 내부적으로 예외를 발생시키는 것으로 대충 짐작이 됩니다.)
이에 관해 좀 더 생각해 볼 주제나 키워드가 있을까요? 아니면 조금의 설명을 보태주시면 감사하겠습니다.
// 이 코드는 에러가 발생한다.
for (const i = 0; i < 5; i++) {
console.log(i)
}
// 아직 의문점이 남는다. 아래 for 문에서도 각 i 는 독립적인 block scope를 가지게 되는 것이 아닌가?
{
const i = 0;
console.log(i);
}
{
const i = 0;
console.log(i);
}
답변을 작성해보세요.
1
정재남
지식공유자2019.06.25
으아... 제가 지난번에 답변을 이상하게 달아놓았었네요;;
강의 당시엔 맞게 설명을 했었는디 왜그랬을까요 ㅠㅠ
질문에 대한 답변을 틀리게 말씀드렸습니다. 죄송합니다.
일반적인 for문에서는 각 i값에 대해 독립적인 블록스코프가 생기는 것은 맞습니다.
다만 각각의 블록스코프 내부에서 i를 선언하는 것이 아니라, 외부 변수인 i를 끌어다 쓰는 것으로 이해해야 맞습니다.
즉 아래와 같은 형태가 됩니다.
let i = 0;
{
funcs.push(function(){ console.log(i); });
i = 1;
}
{
funcs.push(function(){ console.log(i); });
i = 2;
}
{
funcs.push(function(){ console.log(i); });
i = 3;
}
답변 1