• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

일반적인 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

답변을 작성해보세요.

1

으아... 제가 지난번에 답변을 이상하게 달아놓았었네요;;

강의 당시엔 맞게 설명을 했었는디 왜그랬을까요 ㅠㅠ

질문에 대한 답변을 틀리게 말씀드렸습니다. 죄송합니다.

 

일반적인 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;
}