폐쇄된 공간에 대한 접근 권한으 가진 함수를 말함. 이러한 특징으로 비공개 데이터를 가진 객체를 만들 수 있습니다.
자바스크립트에서는 함수 스코프가 있고, 함수 내부에서 정의된 변수하면 함수의 어느 부분에서든 접근할 수 있다
이 말은 즉, 내부 함수에서 자신을 포함하는 외부 함수의 스코프에 접근할 수 있다
let outer = function(){
let a= 1;
let inner = function(){
let b = 5;
let c = 6;
a = a + b + c;
console.log(a); // 12 상위 부모 변수에 접근할 수 있다.
}
inner()
}
outer();
만약 내부 함수가 외부 함수보다 오래 살아 있는 경우에, 외부함수에 있던 변수들은 어떻게 될 까요?
let outer = function(){
let a= 1; // 외부 함수에 있던 변수 - 접근이 가능했다는 이야기
let inner = function(){
let b = 5;
let c = 6;
a = a + b + c;
console.log(a); // 12 상위 부모 변수에 접근할 수 있다.
}
return inner
}
const innerFromOuter = outer(); // inner함수 반환
innerFromOuter(); // 12 // 나중에 실행이 된다.
비공개 객체 만들기
const person = (function(){
let age = 15;
return {
name:"LUCAS",
getAge:function(){return age},
setAge:function(val){age = val}
}
})()
person.getAge(); // 15
person.setAge(20);
person.getAge(); // 20
person.age = 100; // 접근 불가능
person.getAge(); // 20