[[TableOfContents]]

 * 강의 노트는 날짜나 요일 별로 구분하지 않고 큰 주제별로 분리할 생각입니다. 그렇게 하는 편이 나중에 찾아보기에 좋을것 같습니다 -[안혁준]
 * 저의 주관적인 부분이 많이 들어 갈수 있으므로 부족하다 생각되는 부분은 채워주세요.
 * 강의 노트는 같이 만들어 나가는 것이므로 모두들 함께 채워나갑시다.

== JavaScript란? ==

=== Prototype 기반 언어 ===
 * prototype언어?
  * oop의 흐름은 class와 prototype으로 나늰다.
  * prototype은 클래스가 들고 있어야하는 함수들을 특정 인스턴스가 들고 있게 만드는 것이다.
  * 이 특정 인스턴스를 prototype이라 부른다.
=== 함수형 언어 ===
 * 함수를 일급객체로 다루는 언어 
  * 일급객체란?
   * 변수 안에 담을수 있고, 
   * 파라미터로 전달할수 있으며,
   * 반환값을 사용할수 있고
   * 할당된이름과 관계없이 구분할수 있다

== Javascript 문법 ==
=== 클로져 ===
 * 클로져 : 내부의 있는 외부에 있는 함수의 지역 변수를 쓸수 있는것. 때문에 의도하지 않은 결과를 가져올수 있다.
=== Excuteion Context ===
 * this
  * p.do() 에서 p가 실행문맥이다. 그러나 이 함수를변수로 받으면 var f = p.do; f(); 이런식으로 그러면 f는 실행문맥이 없기 때문에 전역객체가 실행문맥으로 간주된다.
 * 결론적으로 함수 앞 마지막 . 앞에 있는 것이 중요하다.
 * func.apply(ec, arguments) 나 func.call(ec, arg1, arg2, ... )으로 func안에서의 실행문맥(this)를 변경할수 있다.
=== new의 동작 ===
 * new Person();
  * 1. create instance
  * 2. instance.__proto__ = Person.prototype;
   * 이때의 __proto__는 프로토타입 체인이라 할수있다.(엔진별로 다를수 있다.)
  * 3. 실행문맥을 instance로 한 생성자를 호출한다.
=== prototype ===
==== Class vs Prototype ====
 * Class : 함수와 맴버 변수가 각각 class와 인스턴스에 나누어 져있는것.
 * prototype : 함수와 맴버 변수 모두 인스턴스에 저장되있는것 
  * 단지 함수는 다른 인스턴스에 존재한다.
  * 그 다른 인스턴스는 prototype이라 부른다.
         class   <-----------------> prototype
         VTable  <-----------------> prototype chain (__proto__)
==== 상속 ====
 * 상속을 위해서는 prototype chain에 등록하면 된다.
{{{
function People(){};
function Man(){};
Man.prototype = new People();
m = new Man();
}}}
=== dispatch ===
 * 실제 호출해야 하는 함수를 찾는 과정
 * javascript에서는 실행시간에 프로토타입 체인에 의해 실행한다.
  * instance의 __proto__에서 찾고 없으면 그위에 __proto__에서 찾고...