클로저 스코프가 생긴다. (변수의 유효범위)
각각의 파일은 하나의 스코프를 가진다. export 를 하면 하나의 객체로 export 되는 것.
블록 스코프는 원래 없었는데 생긴 것.
함수형 프로그래밍에서는 원래 상태를 저장할 수 없는데, 클로저를 이용해 객체 지향 프로그래밍처럼 함수를 저장할 수 있게 됨
const pipe = (...args) => (str) => args.reduce((pre, curr) => curr(pre), str)
const trim = (str) => str.trim()
const normalize = (str) => str.normalize()
const str = ' \u0041\u006d\u00e9\u006c\u0069\u0065 '
pipe(trim, normalize, console.log)(str) // Amélie
import React, { useEffect, useState } from "react";
function ItemList() {
const [filteredItems, setFilteredItems] = useState([]);
const pipe = (...args)=> (data) => args.reduce((data, fn)=> fn(data), data)
useEffect(() => {
// fetchItems - filter - setFilteredItems 를 pipe
const filter = (data)=> data.filter((item) => item.isFavorite)
pipe(fetchItems, filter, setFilteredItems)()
}, []);
const fetchItems = () => {
return [
{ id: 1, name: "Item 1", isFavorite: true },
{ id: 2, name: "Item 2", isFavorite: false },
{ id: 3, name: "Item 3", isFavorite: true }
// ...
];
};
return (
<div>
<h2>관심목록</h2>
<ul>
{filteredItems.map((item) => (
<li key={item.id}>{item.name}</li>
))}
</ul>
</div>
);
}
export default ItemList;