A. 자바스크립트에서 클로저(Closure)는 함수와 해당 함수가 선언된 렉시컬 스코프(Lexical Scope) 간의 관계를 나타내는 개념. 클로저는 함수가 다른 함수의 내부에 정의되어 있을 때 발생하며, 외부 함수의 변수에 접근할 수 있는 함수를 말한다.
렉시컬 스코프(Lexical Scope): 클로저는 함수가 선언된 시점에서의 스코프에 대한 참조를 유지합니다. 이는 함수가 어디에서 호출되는지가 아니라 어디에 선언되었는지에 따라 변수에 접근할 수 있는지를 결정합니다.
외부 변수 접근: 클로저는 자신이 선언된 함수의 외부 스코프에 있는 변수에 접근할 수 있습니다. 이는 클로저가 선언된 시점에서의 외부 변수에 대한 참조를 유지하기 때문입니다.
function outerFunction() {
var outerVariable = "I am from outer function";
function innerFunction() {
console.log(outerVariable);
}
return innerFunction;
}
// outerFunction을 호출하면 innerFunction이 반환되고, 이때 클로저가 형성됩니다.
var closureExample = outerFunction();
// closureExample을 호출하면 outerFunction에서 선언된 outerVariable에 접근할 수 있습니다.
closureExample(); // 출력: "I am from outer function"
이 예제에서 innerFunction은 outerFunction 내에서 정의되었고, outerFunction의 변수에 접근할 수 있다. 이런식으로 클로저를 사용하면 변수를 은닉하고 보호할 수 있으며, 함수 간에 데이터를 전달하거나 상태를 유지하는 데 활용될 수 있다.