TIL

Steadystudy·2022년 3월 20일
0

TIL

목록 보기
1/6
post-thumbnail

오늘 배운 것

  • 변수 호이스팅과 함수 호이스팅의 차이
    • var 키워드로 선언한 전역 변수와 함수 선언문으로 정의된 전역 함수는 객체 환경 레코드

    • 함수 선언문으로 정의한 함수가 평가되면 함수 이름과 동일한 이름의 식별자를 객체 환경 레코드에 바인딩된 BindingObject를 통해 전역 객체에 키로 등록하고 생성된 함수 객체를 즉시 할당한다. 즉, 함수 선언문으로 정의한 함수는 함수 선언문 이전에 호출할 수 있다.

    • var로 선언한 전역 변수는 “선언 단계”와 “초기화 단계"가 동시에 진행됨, 전역 객체에 변수 식별자를 키로 등록한 다음, 암묵적으로 undefined를 바인딩

    • let, const로 선언한 전역 변수는 선언적 환경 레코드에 등록됨. 그러므로 전역 객체의 프로퍼티가 되지 않음. 즉 런타임에 실행 흐름이 변수 선언문에 도달하기 전까지 일시적 사각지대에 빠짐.

      // 초기화 단계가 진행되기 전까지 y 변수에 <uninitialized> 상태
      const y = 2; // 초기화 한 후 y 변수에 2 할당
  • 함수 렉시컬 환경
    • 렉시컬 환경은 환경 레코드와 외부 렉시컬 환경에 대한 참조로 구성
    • 함수 렉시컬 환경을 구성하는 컴포넌트 중 함수 환경 레코드는 매개변수, arguments 객체, 함수 내부에서 선언한 지역 변수와 중첩 함수를 등록하고 관리한다.
    • 외부 렉시컬 환경에 대한 참조는 상위 스코프를 기억함. 자바스크립트는 함수를 “어디서 호출했는지"가 아니라 “어디에 정의했는지”에 따라 상위 스코프를 결정. 이를 렉시컬 스코프(정적 스코프)라 한다.
  • 클로저
    • 외부 함수보다 중첩 함수가 더 오래 유지되는 경우 중첩 함수는 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있다. 이러한 중첩 함수를 클로저라고 부른다.
    • 상위 스코프의 어떤 식별자도 참조하지 않는 함수는 클로저가 아니다.
    • 클로저는 상태를 안전하게 변경하고 유지하기 위해 사용. 상태를 안전하게 은닉하고 특정 함수에게만 상태 변경을 허용하기 위함.

소감

첫 TIL을 작성해봤는데 많은 정보들 중 무얼 적을지 간추리는 게 더 힘들었다. 기본적인 정의나 자세한 내용들은 다른 글에서 잘 정리했기 때문에 나는 한 번씩 흘리고 갔을(?) 그런 정보를 적고 이해하기 어려웠던 개념들이 있으면 어떻게 이해했는지 나의 관점에서 작성하도록 해봐야겠다.

세 줄 요약

  • 첫 TIL
  • TIL에 적을 내용 고민한 결과, 나의 관점에서 부족했던 정보 적기
  • 내일부터 프로그래머스 과정 시작
profile
꾸준함을 추구하는 개발자

0개의 댓글