Web Dev/1. JS 문법 관련

블록 스코프와 지역스코프

hYhY1234 2021. 3. 28. 16:37
728x90

debugger에서 확인한 내용

function test() {
  for (var i = 0; i < 10; i++) { // var는 블록스코프를 인정하지 않아서 local(지역스코프에 포함)
    (function () {
      var v = i;
      setTimeout(() => console.log(v), 100);
    })();

    for (let i = 0; i < 10; i++) { // let 키워드는 블록스코프 단위로 돌아가기때문에 block스코프에 포함
      console.log("i", i);
    }
  }
}

test();

상세!

 

스코프는 식별자가 유효한 범위를 말한다

 

- var키워드는 함수가 실행되면서 생성된 실행컨텍스트의 지역스코프에 등록되고, 

- let, const는 블록 스코프를 단위로 동작해서 블록 내에 있을때는 블록스코프에 등록이된다. 아니면 Local스코프에서 등록된다. 

 

 

이 스코프는 모두다 렉시컬 스코프를 따르기때문에 함수가 어디에서 정의되어있는지에 따라 상위 스코프가 정해진다. 즉, 스코프 체인은 함수가 정의되었을때의 lexicalEnvironment를 참조한다