클로저

Geonil Jang·2021년 7월 27일
0

code-js

목록 보기
4/7
post-thumbnail

클로저 - 중단하다, 폐쇄하다

폐쇄된 공간에 대한 접근 권한으 가진 함수를 말함. 이러한 특징으로 비공개 데이터를 가진 객체를 만들 수 있습니다.

자바스크립트에서는 함수 스코프가 있고, 함수 내부에서 정의된 변수하면 함수의 어느 부분에서든 접근할 수 있다
이 말은 즉, 내부 함수에서 자신을 포함하는 외부 함수의 스코프에 접근할 수 있다

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

정리

  • 자바스크립트는 내부 함수에서 자신을 포함하는 외부 함수의 스코프에 접근할 수 있습니다.
  • 내부 함수가 살아 있는 상태에서 외부 함수가 파괴되면 외부 함수의 변수들에 대한 접근 권한은 내부 하수만 가지게 됩니다.
  • 이렇게 폐쇄된 공간에 대한 접근 권한을 가진 함수가 클로저 이다
profile
takeaways

0개의 댓글