자바스크립트 스코프

2018-02-08

1. 전역 스코프



2. 블록 스코프

변수 숨김 예제

3. 클로저

  • closure: 닫혀있음, 폐쇄성, 완결성
  • 함수 내부에서 생성한 데이터와 그 유효범위(스코프)로 인해 발생하는 특수한 현상/상태
  • 내부함수는 외부함수의 지역변수에 접근할 수 있는데 외부함수의 실행이 끝나서 외부함수가 소멸된 이후에도 내부함수가 외부함수의 변수에 접근할 수 있다
  • 클로저 예제
  • 클로저 예제2

3-1. lexical environment

  • 선언 당시의 환경에 대한 정보를 담는 객체(구성 환경)
  • 이 함수는 이러이러한 정보들로 구성되어 있다
  • 함수와 그 함수가 선언될 당시의 환경정보 사이의 조합

3-2. 클로저 사용 이점

  • 접근 권한 제어
  • 지역변수 보호
  • 데이터 보존 및 활용

3-3. 클로저로 private member 만들기

  • 1) 함수에서 지역변수 및 내부함수 등을 생성한다
  • 2) 외부에 노출시키고자 하는 멤버들로 구성된 객체를 return 한다
  • return한 객체에 포함되지 않은 멤버들은 private 한다
  • return한 객체에 포함되어 있는 멤버들은 public하다.
  • 클로저로 private member 만들기



4. 즉시함수호출

(function(){

})();

5. 함수 스코프와 호이스팅

5-1. 변수 호이스팅

  • let을 쓰면 변수를 선언하기 전에 사용하면 에러가 발생하지만, var는 선언하기 전에도 사용할 수 있다.
  • var로 선언한 변수는 끌어올린다는 뜻의 호이스팅을 따른다.
  • 자바스크립트는 함수나 전역 스코프를 보고 var로 선언한 변수를 맨 위로 끌어 올림
  • 선언만 끌어올려지며 할당은 끌어올려지지 않음.
  • 변수 호이스팅 예제
  • 변수 호이스팅 예제2

5-2. 함수 호이스팅

  • 함수 선언도 스코프 맨 위로 끌어올려진다. 따라서 함수 선언 전에 호출할 수 있다
  • 단, 변수에 할당된 함수 표현식은 끌어올려지지 않는다. 변수의 스코프 규칙을 따름
  • 함수 호이스팅 예제


6. var, let, const

  • var는 함수 스코프이고 let, const는 블록 스코프이다
  • let은 변수에 재할당이 가능하지만 const는 변수 재선언, 재할당 모두 불가능 하다.
// let
let a = 'test';
let a = 'test2';  // Uncaught SyntaxError: Identifier 'a' has already been declared
a = 'test3'; // 가능

// const
const b = 'test';
const b = 'test2'; // Uncaught SyntaxError: Identifier 'b' has already been declared
b = 'test3';  // Uncaught TypeError:Assignment to constant variable.



7. this


전체 예제는 ch7.스코프 참고.