프로젝트 작업을 하고 있는데 함수 실행이 완료된 후에도 변수 값을 "기억"하는 함수가 필요합니다. 클로저는 코드 어디를 가든 이전 강의에서 배운 지식을 가지고 다닐 수 있는 마법의 배낭과 같습니다. 이는 JavaScript에서 가장 강력하지만 오해되는 개념 중 하나입니다. 하지만 걱정하지 마세요. 이 가이드가 끝날 때쯤이면 머리가 긁힐 것 같은 느낌이 들다가 "아하!"로 마무리될 것입니다.
클로저는 외부 함수 실행이 완료된 후에도 함수가 주변 상태(해당 범위의 변수)를 "기억"하는 경우입니다. 이를 관련성 있는 비유로 분석해 보겠습니다.
당신이 학생이라고 상상해 보세요. 노트, 펜, 책이 담긴 배낭이 있습니다. 교실을 떠나지만(외부 기능) 배낭에 있는 모든 것에 여전히 접근할 수 있습니다(폐쇄). 나중에 문제를 해결해야 할 때마다 배낭에 저장해둔 지식을 꺼내보세요.
JavaScript에서는 다음과 같은 경우에 클로저가 발생합니다.
코드 예제를 통해 클로저가 실제로 작동하는 모습을 살펴보겠습니다.
function outerFunction() { const outerVariable = 'Hello, Closure!'; function innerFunction() { console.log(outerVariable); } return innerFunction; } const myClosure = outerFunction(); myClosure(); // Output: "Hello, Closure!"
여기서 무슨 일이 일어나고 있는 걸까요?
function createCounter() { let count = 0; return function () { count++; return count; }; } const counter = createCounter(); console.log(counter()); // Output: 1 console.log(counter()); // Output: 2
여기서 무슨 일이 일어나고 있는 걸까요?
루프 내부에서 클로저를 사용하면 개발자가 문제를 일으키는 경우가 많습니다.
for (let i = 1; i <= 3; i++) { setTimeout(() => console.log(i), i * 1000); } // Output: 1, 2, 3 (each after 1 second)
이것이 작동하는 이유는 무엇입니까?
? 문서: MDN 폐쇄
클로저는 단지 이론적인 개념이 아니라 놀라울 정도로 실용적입니다! 클로저가 빛나는 몇 가지 일반적인 시나리오는 다음과 같습니다.
클로저는 재사용을 위해 계산된 값을 저장하여 시간과 리소스를 절약할 수 있습니다.
function outerFunction() { const outerVariable = 'Hello, Closure!'; function innerFunction() { console.log(outerVariable); } return innerFunction; } const myClosure = outerFunction(); myClosure(); // Output: "Hello, Closure!"
클로저는 상태를 유지하기 위해 이벤트 리스너에서 자주 사용됩니다.
function createCounter() { let count = 0; return function () { count++; return count; }; } const counter = createCounter(); console.log(counter()); // Output: 1 console.log(counter()); // Output: 2
클로저를 사용하여 개인 변수를 생성하고 기능을 캡슐화할 수 있습니다.
for (let i = 1; i <= 3; i++) { setTimeout(() => console.log(i), i * 1000); } // Output: 1, 2, 3 (each after 1 second)
폐쇄를 통해 다음을 수행할 수 있습니다.
클로저는 JavaScript의 스위스 군용 칼과 같습니다. 데이터 캐싱, 이벤트 처리, 비공개 변수 생성 등 무엇을 하든 클로저는 앱의 상태를 관리하는 강력한 방법을 제공합니다.
챌린지: 간단한 카운터를 만들거나 캐싱 메커니즘을 만드는 등 소규모 프로젝트에서 클로저를 사용해 보세요. 제어 클로저가 얼마나 많은 기능을 제공하는지 놀라게 될 것입니다!
이 기사가 마음에 드셨다면 제 작업을 후원해 보세요.
위 내용은 JavaScript의 클로저 이해: 혼란에서 명확성까지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!