prototype chain
이라는 것 덕분에 Function 객체 밑에있는 bind, apply, call등의 함수에 접근할 수 있는 것 이다.function add(a,b){
return a+b
}
// 함수를 다른 함수의 인자로 넘긴다.
[1, 2, 3].reduce(add, 0)
(() => {
console.log('익명 함수를 생성한다.')
})()
function outer(a){
function inner(b){
return a+b
} // 중접함수를 생성한다.
return inner(10)
}
const Person = (name) => {
// 함수를 변수로 생성한다.
const printName = () => console.log(name)
return {printName}
} // 함수를 리턴하며 closure를 생성한다.
const person = Person('Daniel')
person.printName()
function printName(name){
console.log('name :', name)
}
// 함수끼리 비교한다.
// ===의 경우, 변수가 같은 객체(함수)를 가르키는지 체크한다.
console.log(printName === person.printName)
function createCard() {
let title = "";
let content = "";
function changeTitle(text) {title = text}
function changeContent(text) {content = text}
function print() {
console.log("TITLE -", title);
console.log("CONTENT -", content);
}
return {changeTitle, changeContent, print};
}
const card1 = createCard();
card1.changeTitle("생일카드");
card1.changeContent("생일 축하해");
card1.print();
const card2 = createCard();
card2.changeTitle("감사카드");
card2.changeContent("고마워");
card2.print();
createCard()
는 card라는 closure를 생성하는 팩토리 함수이다.let rate = 1.05;
function app(){
let base = 10;
return function (price){
return price * rate + base;
};
}
const getPrice = app();
getPrice(120) //136
console.log(app()(1)); // 11.05
rate = 1.1;
console.log(app()(1)); // 11.1
상태 유지 => 앞서 언급한 예제와 가장 비슷하며 factory 함수처럼 어떠한 함수를 return함으로써 return 당시의 상태를 기억하여 prop들의 상태를 유지해주는 것이다.
정보은닉 => private를 흉내낼 수 있는 방법으로 한마디로 setter 메서드를 생성하지 않음으로써 변수(prop) 값에 접근할 수 없도록 하는 방법이 있다.