```javascript var LoginPage = (function () { function LoginPage(container) { var _this = this; // 외부 this
// 람다 컴파일 후 container.on("click", "login-link", function (item) { _this.login(); // 외부 this를 사용함 });
// 컴파일 후 -> 그대로 container.on("click", "login-link", function (item) { this.login(); }); }
LoginPage.prototype.login = function () { console.log("login"); }; return LoginPage; })();
즉, 람다에서 `this`사용은 유의 해야한다. 저번에 this 바인딩 공부할 때
람다 같은 경우 불완전 함수라고 우리끼리 명시한 바 있다.
this의 바인딩 문제였는데 여기서 한번더 거론 중.
즉 여기서 알 수 있는 것은, `람다에서 this는 한단계 위를 지칭`함을 알 수 있다
**가급적 화살표 함수 사용 권장 -> 깔끔, 유연, function 키워드의 대체 가능**
### 타이핑
- 변수에 타입 할당
```typescript
var numbers: Array<number> = [];
numbers.push(7);
numbers.push(8);
var unknown = numbers.pop();
컴파일에만 확인하는 작업 용도
저자는 타입스크립트 찬양론자
트레이서
타입스크립트와 같은 컴파일러
구글 후원. ES6 -> ES5로 변환 해주는 컴파일러
트레이서가 지원하는 ES6 함수목록 ... 많아서 생략.. 그중에서 5개 소개 중
클래스
기본매개변수
템플릿 리터럴
let으로 블록 바인딩하기
비동기
트레이서 설치
# nodejs, npm 설치된 경우$npm install -g traceur# 컴파일 할 수 있는 traceur 바이너리 생성$traceur --script input.js --out output.js
백틱 (``)을 사용하여 변수 매핑이 가능
JSP 같은 템플릿 도구 일부를 대체 가능 할 것으로 보임
var name ="aaa";var s =`this is aa ${name}`;console.log(s);
let으로 블록바인딩하기
ES6부터
함수기반의 스코프 -> 블록기반의 스코프로 변경 하는 키워드 let
비동기
await/async
-> 비동기코드를 명확하게(동기처럼) 해준다
functiontimeout(ms) {returnnewPromise((resolve => {setTimeout(resolve, ms); })); }asyncfunctionasyncValue(value) {awaittimeout(1500);return value; } (asyncfunction () {console.log("Start");var valuePromise =asyncValue(42).catch(console.error.bind(console));console.log("Task is running in the background");console.log("Awaiting the promise");var value =await valuePromise;console.log("Promise resolved");console.log(value); })();/* Start Task is running in the background Awaiting the promise -> 딜레이 후 1500ms Promise resolved -> 반환 후 실행 42 */