const secureBooking = function(){ let passengerCount = 0; return function(){ passengerCount++; console.log(`${passengerCount} passengers`); } } const booker = secureBooking(); booker(); booker(); booker();
정의: 클로저는 EC가 사라진 후에도 fn이 생성된 EC의 폐쇄형 변수 환경입니다.
또한 클로저는 상위 fn이 반환된 후에도 fn에 상위 fn의 모든 변수에 대한 액세스를 제공합니다. fn은 외부 범위에 대한 참조를 유지하므로 시간이 지나도 범위 체인이 유지됩니다.
클로저를 사용하면 fn이 생성될 당시 존재했던 변수와의 연결이 끊어지지 않습니다. fn이 어디든 가지고 다니는 배낭과 같습니다. 이 백팩에는 fn이 생성된 환경에 존재했던 모든 변수가 들어있습니다.
클로저를 수동으로 생성할 필요는 없습니다. 또한 폐쇄형 변수에도 명시적으로 접근할 수 없습니다. 클로저는 유형의 JS 객체가 아닙니다. 즉, 클로저에 접근하여 변수를 가져올 수 없습니다. fn의 내부 속성입니다. 백팩 구경은 "console.dir(booker);"
[[Scope]]는 이번 fn 통화의 VE에 대해 보여줍니다.
[[]]는 코드에서 액세스할 수 없는 내부 속성을 의미합니다.
클로저를 생성하기 위해 항상 다른 fn에서 fn을 반환할 필요는 없습니다. 아래 예에서 변수 'f'는 전역 범위에 있으므로 fn 내부에도 정의되지 않았습니다. g()가 EC를 마친 후에도 'a' 변수에 액세스할 수 있습니다. 이제 'a'는 'f'의 배낭 안에 들어있습니다.
let f; const g = function(){ const a = 23; f = function() { console.log(a*2); // 46 }; }; const h = function(){ const b = 777; f = function(){ console.log(b*2); // 1554 }; }; g(); f(); console.dir(f); // f fn is reassigned using h fn. Hence, old closure value i.e 'a' will be replaced with new value 'b' which can be verified using console.dir(). h(); f(); console.dir(f);
// Boarding Passengers using Closures const boardPassengers = function(n, wait){ const perGroup = n / 3; setTimeout(function(){ console.log(`We are now boarding all ${n} passengers`); console.log(`There are 3 groups, each with ${perGroup} passengers`) }, wait*1000); console.log(`Will start boarding in ${wait} seconds`); } boardPassengers(180, 3);
위 내용은 JS의 클로저 이해하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!