Javascript 클로저 변수가 한 번만 초기화됩니까? [복제]
Nov 11 2020
여기에 간단한 JS 논리 질문 .. 아래 코드에서 add ()는 왜 카운터를 0으로 한 번만 설정합니까? 함수가 호출 될 때마다 0으로 재설정해야한다고 생각합니다.
var add = (function () {
var counter = 0;
return function () {counter += 1; return counter}
})();
add(); // 1
add(); // 2
감사!
답변
4 slebetman Nov 11 2020 at 05:03
코드를 오해하고 있습니다. 함수 add()에 코드가 없습니다 var counter = 0.
다음은 더 명확하게 만드는 똑같은 코드를 다시 작성한 것입니다.
var add;
// Note: THIS function is NOT add()
(function () {
var counter = 0;
// THIS function is add()
add = function () {counter += 1; return counter}
})();
add(); // 1
add(); // 2
위의 코드 add는 할당 방법 을 제외하고는 원래 코드와 똑같은 작업을 수행합니다 . 귀하의 코드에서는 반환 값을 통해 할당되었지만 위에서는 단순히 전역 변수로 직접 할당하여 어떤 기능이 add().
원래 코드와 더 비슷하게 보는 또 다른 방법은 두 함수의 이름을 명시 적으로 지정하는 것입니다.
var function1 = function () {
var counter = 0;
// The returned function is what will be assigned to add()
return function () {counter += 1; return counter}
}; // Do not call it yet since calling it was what was confusing you
var add = function1();
add(); // 1
add(); // 2