목차

1. 데이터 타입

javascript에는 아래와 같은 데이터 타입이 존재합니다.

Primitive TypeReference Type의 차이점은 메모리 주소 값을 할당 하냐의 차이 입니다.
당연히 Reference Type주소 값을 할당한다고 보면 됩니다.

2. 함수

2-1. 호이스팅

호이스트? 자바스크립트 엔진은 변수선언과 함수 선언을 최상단으로 끌어올려, 선언이 호출보다 뒤늦게 나와도 호출을 사용할 수 있습니다. 그리고 CASCADE 원칙에 의해 동일한 이름으로 선언 되었다면, 나중에 선언된 것을 원칙으로 합니다.

function sum(a, b) {
  return a + " + " + b + " = " + (a + b);
}
sum(1, 2);

function sum(a, b) {
  return a + b;
}
sum(1, 2);

2-2. 함수 선언문과 함수 표현식

함수 선언문

function a() {
  return "a";
}

기명 함수표현식

var b = function bb() {
  return "bb";
};

익명 함수 표현식

var c = function() {
  return "c";
};

2-3. 함수 스코프, 실행 컨텍스트

스코프? 변수의 유효 범위!
실행 컨텍스트? 실행되는 코드 덩어리(추상적인 개념)로 호이스팅, this 바인딩 정보가 담깁니다. 즉, 함수를 실행했을 때, 필요한 정보들을 모아 놓은 집합체에 해당됩니다.

그렇다면 둘의 차이는? 스코프정의될 때 결정이 됩니다.
실행 컨텍스트실행될 때 생성됩니다.

2-4. 콜백함수

콜백함수? 제어권을 넘겨 주면 어떻게 되돌려 주는 것은 제어권을 받은 부분이 처리하게 되는겁니다. 대표적인 예로 setInterval 함수가 있습니다.

3. this

this는 다음과 같은 4가지 영역에서 다른 의미를 가집니다.

var a = {
  b: function() {
    console.log(this);
  }
};
a.b();

추가적으로 덧붙이자면, call, apply, bind 함수는 this의 범위를 개발자가 지정한대로 변경할 수 있습니다.

4. 클로저

클로저? 최초 선선시의 정보를 유지하는 것이 클로저의 핵심입니다. 다음은 클로저의 이점입니다.

5. prototype

5-1. prototype / constructor / proto

__proto__prototype은 연결되어 있습니다.