1958년, 첫 번째 함수형 프로그래밍 언어인 LISP 등장
함수에서 외부의 상태값 참조하거나 외부의 상태를 변경하면 X
let num = 1;
function add(a) {
return a + num;
}
function add(a, b) {
return a + b;
}
const result = add(2, 3);
전달된 데이터를 변경하는 것이 아닌, 새로운 버전의 새로운 오브젝트를 만들어서 결과값으로 전달해야 함 ⇒ 원본 건들면 안됨!
side effect: 함수를 호출하면 외부의 상태가 변경되어 예상치 못한 에러가 발생하는 상황
let person = { name: "minji", age: 25 };
function incearseAge(person) {
person.age = person.age + 1;
return person;
}
let person = { name: "minji", age: 25 };
function incearseAge(person) {
return { ...person, age: person.age + 1 };
}
if나 switch, for과 같은 여러가지 문장 사용하면 X
let numbers = [1, 2, 3];
function multiply(numbers, multiplier) {
for (let i = 0; i < numbers.length; i++) {
numbers[i] = numbers[i] * multiplier;
}
}
function multiply(numbers, multiplier) {
return numbers.map((num) => num * multiplier);
}
const addTwo = (a) => a + 2;
const multiplyTwo = (a) => a * 2;
const transform = (numbers) => numbers.map(addTwo).map(multiplyTwo);
console.log(transform([1, 2, 3, 4]));
const addToppings = (topping) => (food) => food + topping;
const egg = addToppings("🥚");
const bacon = addToppings("🥓");
console.log(egg("🍳"));
console.log(bacon("🍞"));
forEach()
, map()
, find()
, findIndex()
등등