모던 자바스크립트 12 장을 정리한 내용입니다.
var f = function add(x, y) {
return x + y;
};
함수 선언문
function add(x, y) {
return x + y;
}
undefined
가 찍힌다.함수 표현식
var add = function foo(x, y) {
return x + y;
};
foo(2, 5); // 함수 이름은 함수 몸체 내부에서만 유효한 식별자 이므로 함수 이름으로 함수를 호출할 수 없다.
함수 호이스팅
- 함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점은 다르다.
- 함수 선언문으로 정의한 함수는 함수 선언문 이전에 호출할 수 있지만, 함수 표현식으로 정의한 함수는 함수 표현식 이전에 호출할 수 없다.
- 함수 선언문은 함수 호이스팅 된다.
- 함수 표현식은 var를 이용할 경우, 변수 호이스팅 된다.
Function 생성자 함수
var add = new Function("x", "y", "return x + y");
var add2 = function () {
var a = 10;
return new Function("x", "y", "return x + y +a");
};
add2(1, 2); // ReferenceError: a is not defined
화살표 함수(ES6)
var add = (x, y) => x + y;
매개변수와 인수
인수 확인
function add(x, y) {
x = x || 0
y = y || 0
return x + y;
}
function add(x = 0, y = 0) {
return x + y;
}
매개변수의 최대 개수
function f1(left, top, right, bottom) {
...
}
f1(1, 3, 2, 4)
function f1({left, top, right, bottom}) {
...
}
f1({
left: 1,
right: 2,
top: 3,
bottom: 4
})
반환문
참고
Node.js는 모듈 시스템에 의해 파일별로 독립적인 파일 스코프를 갖늗다. 따라서 Node.js 환경에서는 파일의 가장 바깥 영역에 반환문을 사용해도 에러가 발생하지 않는다.
// 우리가 많이 봤던 코드!
// 불변 객체, 방어적 복사
const nextTodos = [ ...this.state.todos ]
const nextState = { ...this.state, /* 변화내용 */}
재귀 함수
중첩 함수
콜백 함수
순수함수와 비순수 함수