타입 체크가 중요하다.
typescript
// @ts-check
/* eslint-disable no-console */
// eslint-disable-next-line no-console
const someString = 'Hello';
const result = Math.log(someString);
console.log(result); // Not a Number
출력 - 'string' 형식의 인수는 'number' 형식의 매개 변수에 할당될 수 없습니다.
npm install --save-dev @types/node
-> 타입 스크립트가 노드환경에서도 적용되려면 이걸 깔아야된다.
jsonconfig.json
퀴즈 1.
setInterval(() => {
// eslint-disable-next-line no-console
console.log('Hey!');
while (true) {}
}, 1000);
5초간 1번 찍힌다.
브라우저나 노드js에서나, web API 혹은 노드api 의 동작이 끝나면 콜백큐에 등록한다.
브라우저나 노드가 요청받은 일을 하고 있는 동안 메인스레드와 이벤트 루프는 영향을 받지않고 계속 실행된다.
이를 오프로딩이라고하며, 노드 서버의 메인 스레드가 하나임에도 불구하고 빠르게 동작할 수 있는 이유이다.
메인스레드가 오래 걸리는 일을 기다리지 않기 때문이다.
binding : js에서는 lexical scope 를 통해 바인딩이 이루어짐
let x = 1;
if (true) {
x += 1;
}
console.log(x); // 2
const y = 1;
if (true) {
const y = 2;
}
console.log(y); // 1
var z = 1;
if (true) {
var z = 2;
}
console.log(z); // 2
closure = function + environment
Closure 의 예시
function and(x) {
return function print(y) {
return x + ' and ' + y;
};
}
const saltAnd = and('salt');
console.log(saltAnd('pepper')); // salt and pepper
console.log(saltAnd('sugar')); // salt and sugar
salt가 바인딩 되어 있다.
and 함수로 만들어진 saltAnd의 클로져는:
closure는 higher-order function을 만드는 데 유용하다.
let과 const는 ES2015(ES6)에 추가된 변수 선언 키워드입니다.
hosting 규칙이 없고, block scoping을 지원한다. 따라서 var보다 훨씩 예측 가능한 코드를 짤수 있게 해준다.
var와 달리 let과 const는 변수를 정의하기 전에는 사용할 수 없다.
가능하면 const만 쓰고, 필요한 경우만 let, var은 절대 쓰지 말자! -> best practice
const user = {
nickname: 'jerry',
age: 22,
email: 'djaflk@kadfnlk.com',
};
const { nickname, ...personalData } = user;
console.log(personalData); // { age: 22, email: 'djaflk@kadfnlk.com' }
const user = {
nickname: 'jerry',
age: 22,
email: 'djaflk@kadfnlk.com',
};
const { nickname, ...personalData } = user;
console.log(personalData);
const arr = [1, 2, 3, 4, 5];
const [head, ...rest] = arr;
console.log(head, ...rest);
console.log(head, rest);