inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Javascript ES6+ 제대로 알아보기 - 초급

for문에서의 주의사항

일반적인 for 문 에서도 i 는 독립적인 block scope를 가지는게 아닐까요?

186

이영창

작성한 질문수 4

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);
}

 

javascript es6

답변 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;
}

프로토타입 체이닝에 대해서

0

378

1

react 사용할 때 destructuring assignment라고 하는거 진짜 많이 사용 했는데 신기합니다.

0

521

1

2023-10-30일 기준 Object Rest/Spread Properties 적용 됬나봐요. 짱신기

0

337

1

제가 이해한 부분이 혹시 맞는지 알 수 있을까요?

0

311

2

블록스코프 내에서 펑션을 선언해서 사용하는경우가 있나요?(실무)

0

348

1

클래스에서 화살표함수?

0

1221

2

default parameter TDZ

0

279

1

강의 자료

1

306

2

전개 연산자 얕은 복사 질문

0

277

1

궁금한게 있는데요 ..

0

307

2

궁금한게 잇는데요 여기서 this는 array값을 출력해주나요?

0

359

1

template literal 강의에서의 reduce 메소드

0

312

2

다운로드 받은파일

0

286

1

const 이럴때도 사용하나요?

0

386

1

순서정렬

0

235

1

함수선언문 말고 arrow function

0

262

1

this바인딩 질문

1

266

1

에로우함수 new.target

0

208

2

함수표현식질문

0

224

1

rest parameter장점

0

312

1

if(exps[i])

0

194

1

좋은강의 감사합니다 이거는 호이스팅이 실행안되는거 같은데

0

307

3

해체하여 적용하려는 대상은 해체하는 대상의 타입에 매칭해야하나요?

0

175

1

강의노트 없습니다.

0

234

1