JavaScript 클로저는 어떻게 작동합니까?
3012 단어 javascriptprogrammingwebdev
Closure means that an inner function always has access to the vars and parameters of its outer function, even after the outer function has returned.
JavaScript에서 중첩 함수를 만들 수 있다는 것을 배웠습니다. 내부 함수는 외부 함수의 변수 및 매개변수에 액세스할 수 있습니다(단, 외부 함수의 인수 객체에는 액세스할 수 없음).
function OuterFunction() {
var outerVariable = 1;
function InnerFunction() {
alert(outerVariable);
}
InnerFunction();
}
예를 들어 InnerFunction()은 outerVariable에 액세스할 수 있습니다.
이제 위의 정의에 따라 InnerFunction()은 별도로 실행되는 경우에도 outerVariable에 액세스할 수 있습니다.
function OuterFunction() {
var outerVariable = 100;
function InnerFunction() {
alert(outerVariable);
}
return InnerFunction;
}
var innerFunc = OuterFunction();
innerFunc(); // 100
위의 예에서는 InnerFunction을 반환합니다. OuterFunction()을 호출하면 OuterFunction에서 InnerFunction을 반환합니다. 변수 innerFunc는 OuterFunction()이 아닌 InnerFunction()만 참조합니다. 따라서 이제 innerFunc()를 호출하면 OuterFunction()에 선언된 outerVariable에 계속 액세스할 수 있습니다. 이를 클로저라고 합니다.
A function can return another function in JavaScript. A function which is assigned to a variable is called function expression.
function Counter() {
var counter = 0;
function IncreaseCounter() {
return counter += 1;
};
return IncreaseCounter;
}
var counter = Counter();
alert(counter()); // 1
alert(counter()); // 2
alert(counter()); // 3
alert(counter()); // 4
외부 함수 Counter는 내부 함수 IncreaseCounter()의 참조를 반환합니다. 증가 카운터는 외부 변수 카운터를 1로 증가시킵니다. 따라서 내부 함수를 여러 번 호출하면 카운터가 매번 1로 증가합니다.
function Counter() {
var counter = 0;
setTimeout( function () {
var innerCounter = 0;
counter += 1;
alert("counter = " + counter);
setTimeout( function () {
counter += 1;
innerCounter += 1;
alert("counter = " + counter + ", innerCounter = " + innerCounter)
}, 500);
}, 1000);
};
Counter();
내부 함수가 외부 함수의 변수에 액세스하는 경우에만 클로저라고 합니다.
클로저를 언제 사용합니까?
클로저는 JavaScript에서 구현 세부 사항을 숨기는 데 유용합니다. 즉, 개인 변수나 함수를 만드는 것이 유용할 수 있습니다.
var counter = (function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
};
})();
alert(counter.value()); // 0
counter.increment();
counter.increment();
alert(counter.value()); // 2
counter.decrement();
alert(counter.value()); // 1
increment(), decrement(), value()는 반환 객체에 포함되기 때문에 public 함수가 되는 반면, changeBy() 함수는 반환되지 않고 increment()와 decrement()에 의해 내부적으로만 사용되기 때문에 private 함수가 됩니다.
Reference
이 문제에 관하여(JavaScript 클로저는 어떻게 작동합니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/neeraj1997dev/how-do-javascript-closures-work-47jk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)