JavaScript의 클로저
그렇다면 폐쇄란 무엇입니까?
클로저를 이해하려면 먼저 Lexical Scoping이라는 것에 대해 이야기해야 합니다.
다음 예를 확인하십시오.
const outerFunc = () => {
const name = "Khan";
const innerFunc = () => {
console.log(name);
}
return innerFunc;
}
"JavaScript의 어휘 범위는 함수 외부에서 정의된 변수가 변수 선언 후에 정의된 다른 함수 내부에서 액세스할 수 있음을 의미합니다."
내가 준 예에서 innerFunc 함수는 어휘 범위가 outerFunc 함수 내부에 있고 name 변수 선언 뒤에 있기 때문에 name 변수에 액세스할 수 있습니다.
이제 우리가 가진 정보로 클로저가 무엇인지 아래 예제에서 확인해보자.
const outerFunc = () => {
const name = "Khan";
const innerFunc = () => {
console.log(name);
}
return innerFunc;
}
const nameLogger = outerFunc();
nameLogger(); // Will log "Khan" to the console
그러나 innerFunc는 outerFunc가 호출되고 이름 변수가 더 이상 범위에 있지 않은 후에도 이름 변수를 어떻게 기억합니까?
이것을 JavaScript에서는 클로저라고 합니다. innerFunc 함수는 외부 변수 이름을 닫았고 이로 인해 outerFunc 함수가 호출된 후에도 이를 기억할 수 있습니다.
클로저에는 많은 사용 사례가 있습니다. 아래 예와 같이:
const adder = (x) => {
return (y) => x + y;
}
const addTwo = adder(2);
const four = addTwo(2);
console.log(four); // Will log 4
위의 예에서 우리는 가산기 함수를 만들기 위해 클로저를 사용했습니다. 여기서 가산기 함수 내부의 반환된 화살표 함수는 변수 x를 닫기 때문에 여전히 기억할 것입니다.
위 예제의 함수 생성기는 Currying이라고도 합니다. 즉, 함수를 사용하여 우리가 작성하는 코드의 양을 줄이는 데 도움이 될 수 있는 다른 함수를 생성한다는 의미입니다. 커링과 클로저가 아니라면 다음과 같이 해야 합니다.
const addTwo = (x) => x + 2;
const addFour = (x) => x + 4;
const addTen = (x) => x + 10;
클로저 덕분에 작성하는 코드의 양을 줄일 수 있고 코드를 훨씬 더 깔끔하게 만들 수 있습니다.
결론
클로저는 JavaScript의 매우 필수적인 부분이며 다양한 방법으로 사용될 수 있습니다. 예를 들어 React 후크는 클로저에 크게 의존합니다. 방법을 알고 싶다면 제 기사인 React에서 부실 클로저 방지하기를 확인하세요. 클로저를 더 잘 이해하는 데 도움이 될 수 있으며 올바르게 사용하지 않으면 실수로 코드에 함정을 만들 수도 있습니다.
그리고 언제나처럼 여기까지 제 글을 읽어주셔서 정말 감사합니다! 내가 실수했다고 생각되면 댓글에 자유롭게 적어주세요. 나는 그들 모두를 절대적으로 확인하고 내 기사에서 올바른 변경을 할 것입니다.
Reference
이 문제에 관하여(JavaScript의 클로저), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaankorkmaz/closures-in-javascript-23p3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)