TIL

dev-whol·2021년 4월 22일
0

✍🏻 Scope와 선언 키워드

  • 변수 접근 규칙에 따른 유효 범위
  • 스코프는 중첩이 가능
  • 가장 바깥의 스코프는 전역 스코프(Global scope) <-반대-> 지역 스코프(Local scope)
  • 지역 변수는 전역 변수보다 더 높은 우선순위를 가짐

Scope의 종류

  • 중괄호로 둘러싼 범위 (block scope)

  • 함수로 둘러싼 범위(function scope)

  • 화살표 함수로 둘러싼 범위(block scope)

블록 스코프와 var 키워드

  • 블록 범위를 벗어나는 경우

    for(let i = 0; i < 3; i++){
      console.log(i); // 3번 반복
    }
    console.log(i); // Reference Error
  • let 대신 var로 선언한 경우

    for(var i = 0; i < 3; i++){
      console.log(i); // 3번 반복
    }
    console.log(i); // 3

var 키워드와 let 키워드

  • var 키워드는 블록 스코프를 무시하고, 함수 스코프만 따른다.
  • 블록 단위로 구분했을 때, 예측 가능한 코드를 작성할 수 있으므로 let 키워드를 권장
  • var 키워드는 재선언하면 에러를 내지 않지만, let 키워드는 재선언하면 에러를 내준다(재선언 방지)

const : 상수(constant)

  • 블록 스코프를 따른다.
  • 값을 새롭게 할당할 일이 없을때 권장
  • 값을 재할당할 경우, TypeError를 낸다.(의도하지 않은 값의 변경을 방지)

let, const, var 비교

letconstvar
유효범위블록 스코프 및 함수 스코프블록 스코프 및 함수 스코프함수 스코프
재할당가능불가능가능
재선언불가능불가능가능

window 객체

  • var로 선언된 전역 변수 및 전역 함수는 window 객체에 속하게 된다.

    var name = "zumwhol";
      console.log(window.name); // zumwhol;
    function name(){
      console.log("hello");
    }
    window.name() // hello
  • 전역 변수는 최소화하자

    • 의도되지 않은 변경이 발생할 수 있다(side effect)
  • 선언 키워드없이 변수에 할당하면 var로 할당한 결과가 된다.
    (strict Mode 적용 : 문법적으로 실수할 수 있는 부분들을 에러로 판단해준다)

0개의 댓글