일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 반공변성
- async/await
- webpack
- React
- 이분 검색
- 투포인터
- RTK Query
- CI/CD
- 인터섹션
- 타입 좁히기
- Promise
- 호이스팅
- map
- 무한 스크롤
- recoil
- 리터럴 타입
- ESlint
- tailwind
- 태그된 유니온
- 공변성
- 결정 알고리즘
- app router
- useAppDispatch
- dfs
- CORS
- Jest
- TS
- autosize
- Cypress
- SSR
Archives
- Today
- Total
짧은코딩
함수와 함수의 호출, 고차함수 본문
반응형
“함수의 호출은 리턴 값으로 대체해라!”
JS 예시
const onClick1 = () => () => {
console.log("hello");
};
const onClick2 = () => {
console.log("hello");
};
document.querySelector("#header").addEventListener("click", onClick1()); // 정답
document.querySelector("#header").addEventListener("click", onClick2()); // 오답
-onClick1이 정답인 이유는 onClick1() 자리에
document.querySelector("#header").addEventListener("click", () => {
console.log("hello");
}); // 정답
이렇게 함수의 리턴값을 넣어보면 되기 때문이다.
-onClick2가 오답인 이유는
document.querySelector("#header").addEventListener("click", undefined); // 오답
함수의 리턴값이 undefined이기 때문이다.
React 예시
-틀린 코드
import React from "react";
// 이 코드는 틀림
export default function App() {
const onClick = (e) => {
console.log(e.target.value);
};
return <div onClick={onClick()}></div>;
}
이 코드는 틀렸다. 그 이유는 onClick() 부분에 리턴 값을 넣어보면 된다.
import React from "react";
import { useCallback } from "react";
export default function App() {
const onClick = useCallback((e) => {
console.log(e.target.value);
}, []);
return <div onClick={undefined}></div>;
}
이렇게 undefined가 되기 때문에 틀린 코드이다.
-맞는 코드이지만 안 좋은 경우
import React from "react";
import { useCallback } from "react";
export default function App() {
const onClick = useCallback(
() => (e) => {
console.log(e.target.value);
},
[]
);
return <div onClick={onClick()}></div>;
}
useCallback을 고차함수로 만드는 것은 좋지 않지만 이렇게 하면 맞는 코드가 될 수 있다.
import React from "react";
import { useCallback } from "react";
export default function App() {
const onClick = useCallback(
() => (e) => {
console.log(e.target.value);
},
[]
);
return (
<div
onClick={(e) => {
console.log(e.target.value);
}}
></div>
);
}
리턴 값을 넣으면 이렇게 되기 때문이다.
-출처
https://www.youtube.com/watch?v=NS1cIsWlFGI&list=PLcqDmjxt30Rt9wmSlw1u6sBYr-aZmpNB3&index=2
제로초님의 영상을 보고 정리한 글입니다.
반응형
'JS > 인간 JS엔진' 카테고리의 다른 글
this를 분석할 수 없는 케이스 (0) | 2024.01.23 |
---|---|
this(this는 호출 시 결정) (1) | 2024.01.23 |
호이스팅 (0) | 2024.01.21 |
스코프 체인 (0) | 2024.01.21 |
호출 스택 분석 (0) | 2024.01.20 |
Comments