이 글은 JS의 클로저에 대한 자세한 설명을 주로 코드 형식으로 설명합니다.
var n = 999; function f1() { console.log(n); } f1() // 999
JavaScript에는 전역 범위와 함수 범위라는 두 가지 범위가 있습니다. 전역 변수는 함수 내에서 직접 읽을 수 있습니다. 함수 f1은 전역 변수 n을 읽을 수 있습니다. 그러나 함수 내부에 선언된 변수는 함수 외부에서 읽을 수 없습니다.
function f1() { var n = 99; } console.log(n);
그러나 일반적인 상황에서는 함수 외부에서 함수 내부의 변수에 액세스해야 하는 경우가 있습니다. 이는 불가능하며 해결 방법을 통해서만 가능합니다. 즉, 함수 내부에 또 다른 함수를 정의하는 것입니다.
function f1() { var n = 999; var f2 = function() { console.log(n); } return f2; } var f = f1(); f();
위 코드에서 함수 f2는 함수 f1 안에 있습니다. 이때 f1 내부의 모든 지역 변수는 f2에 표시됩니다. 그러나 그 반대는 작동하지 않습니다. f2 내부의 지역 변수는 f1에 표시되지 않습니다. 이는 JavaScript 언어에 고유한 "체인 범위" 구조입니다. 하위 개체는 모든 상위 개체의 변수를 수준별로 검색합니다. 따라서 상위 개체의 모든 변수는 하위 개체에 표시되지만 그 반대의 경우는 표시되지 않습니다.
f2은 f1의 지역 변수를 읽을 수 있으므로 f2가 반환 값으로 사용되는 한 f1 외부에서 내부 변수를 읽을 수 있습니다. 클로저는 다른 함수의 내부 변수를 읽을 수 있는 함수 f2입니다. JavaScript 언어에서는 함수 내의 하위 함수만 내부 변수를 읽을 수 있으므로 클로저는 간단히 "함수 내부에 정의된 함수"로 이해될 수 있습니다. 클로저의 가장 큰 특징은 자신이 태어난 환경을 '기억'할 수 있다는 점이다. 예를 들어 f2는 자신이 태어난 환경 f1을 기억하므로 f2에서 f1의 내부 변수를 얻을 수 있다. 본질적으로 클로저는 함수 내부와 함수 외부를 연결하는 다리입니다. 즉, 클로저의 가장 큰 두 가지 용도가 있습니다. 하나는 함수 내부의 변수를 읽는 것이고, 다른 하나는 이러한 변수를 메모리에 유지하는 것입니다.
관련 권장 사항:
js_javascript 기술의 클로저에 대한 간단한 토론
위 내용은 JS 클로저에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!