const func = obj.sayHi() const boundFuns = func.bind(obj) boundFuns() ------------------- const submit = (el) => () => { log(el); } arr.map(el => <button onClick={submit(el)}/>) const param = useMemo(() => a + b) return <Child value={param} />
Ответ от нейросети
sobes.tech AI
Разберём по частям:
-
const func = obj.sayHi()Здесь вызывается функцияsayHiобъектаobjи результат присваиваетсяfunc. ЕслиsayHiвозвращает функцию, тоfunc— функция, иначе — результат вызова. -
const boundFuns = func.bind(obj)Методbindсоздаёт новую функцию с фиксированным контекстомthis. Еслиfunc— функция, тоboundFuns— та же функция, но сthis, привязанным кobj. -
boundFuns()Вызов функции с привязанным контекстом.
-
const submit = (el) => () => { log(el); }Это функция высшего порядка, которая принимает параметрelи возвращает функцию, которая при вызове логируетel. Используется для передачи обработчиков с параметрами. -
arr.map(el => <button onClick={submit(el)}/>)Для каждого элемента массива создаётся кнопка с обработчиком клика, который запомнит значениеelчерез замыкание.
-
const param = useMemo(() => a + b)Хук ReactuseMemoмемоизирует результат вычисленияa + b, чтобы не пересчитывать его при каждом рендере, еслиaиbне изменились. -
return <Child value={param} />Передаём вычисленное значение в дочерний компонент.
Итог:
- В первом примере важно, что
bindфиксирует контекстthisдля функции. - Во втором — замыкания позволяют создавать обработчики с параметрами.
- В третьем —
useMemoоптимизирует производительность, предотвращая лишние вычисления и рендеры.