[JavaScript] 클로저

2024. 6. 6. 15:48· FrontEnd/JavaScript
목차
  1. 1.클로저(closure)
  2. 1-1.렉시컬 스코프
  3. 1-2.반환?
  4. 1-3.클로저
  5. 2.클로저 사용처
  6. 2-1.상태유지
  7. 2-2.전역변수 사용 억제
  8. 2-3. 정보은닉
728x90

 

모던 자바스크립트 Deep Dive를 참고하여 학습,작성하였습니다.


1.클로저(closure)

클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경과의 조합

 

 

 

 

 

 

 

 

 

 

1-1.렉시컬 스코프

렉시컬 스코프는 함수를 호출할때가 아닌 선언한곳에 따라 결정된다.

아래 코드가 작동될때
1.infun 함수는 자신 내부에서 x를 검색
2.없기때문에 외부함수 outfun 함수에서 x를 검색
방식으로 작동한다.
function outfun(){
    var x=10;
    var infun = function() {document.write(x)}
    infun()
}
outfun()

 

 

 

1-2.반환?

아래 코드에서는 외부함수인 outfun2가 inner에 infun함수를 반환한후에 콜스택에서 제거된다.
하지만 그 이후에도 변수 x값을 참조하여 지역변수 x를 사용하였다.
이게 바로 클로저다.
function outfun2(){
    var x=10;
    var infun = function() {document.write(x)+"<br>"}
    return infun
}
var inner= outfun2()
inner()

 

 

 

 

1-3.클로저

클로저는 함수가 선언될 때의 환경(스코프)을 기억하여, 그 함수가 다른 스코프에서 실행되더라도 원래의 스코프에 있는 변수들에 접근할 수 있게 해준다.

 

 

 

 

 

2.클로저 사용처

2-1.상태유지

현재 상태를 기억하고 변경된 최신 상태를 유지

 

 

 

 

2-2.전역변수 사용 억제

오류를 피하고 프로그램의 안정성을 높이기 위해 클로저는 적극적으로 사용된다.
function Createcounter(){
    var count = 0;
    return function(){
        count++
        document.write("<br>"+count)
    }
}
var counter=Createcounter()
counter()
counter()
counter()
counter()
counter()

 

 

2-3. 정보은닉

메소드들은 모두 자신이 생성됐을 때의 렉시컬 환경인 생성자 함수 Counter의 스코프에 속한 클로저이며 렉시컬 환경을 공유한다.
function Counter(){
    var counter=0;
    this.increase= function(){return ++counter}
    this.decrease= function(){return --counter}
}
counter1= new Counter();
document.write("<br>"+counter1.increase())
document.write("<br>"+counter1.decrease())
document.write("<br>"+counter1.decrease())
document.write("<br>"+counter1.decrease())

 

 

 

 

 

 

 

 


🎈참고자료

https://poiemaweb.com/js-closure

 

 

728x90
저작자표시 (새창열림)

'FrontEnd > JavaScript' 카테고리의 다른 글

[JavaScript] 객체지향 프로그래밍  (0) 2024.06.06
[JavaScript] this  (0) 2024.06.05
[JavaScript] strict mode  (0) 2024.06.04
  1. 1.클로저(closure)
  2. 1-1.렉시컬 스코프
  3. 1-2.반환?
  4. 1-3.클로저
  5. 2.클로저 사용처
  6. 2-1.상태유지
  7. 2-2.전역변수 사용 억제
  8. 2-3. 정보은닉
'FrontEnd/JavaScript' 카테고리의 다른 글
  • [JavaScript] 빌트인 객체
  • [JavaScript] 객체지향 프로그래밍
  • [JavaScript] this
  • [JavaScript] strict mode
아사_
아사_
프로그래밍 공부한거 정리해두는 메모장 블로그
아사_
개발공부 블로그
아사_
전체
오늘
어제
  • 분류 전체보기 N
    • FrontEnd N
      • html
      • css
      • JavaScript
      • Node.js
      • React N
      • React Native
    • BackEnd
      • SpringBoot
      • FastAPI
      • PHP
      • Flask
      • supabase
    • Language
      • Python
      • JAVA
      • Kotlin
      • C++
    • Development Tools
      • AWS
      • GIT,GITHUB
      • Docker
      • 메시지 브로커
      • 기타 도구,플랫폼
    • Computer Science
      • 개발지식
      • Server&Network
      • Algorithm&DataStructure
      • Security
      • DataBase
      • OS
    • AI
    • 기타
      • 잡다
      • Android
      • 도서
    • 클론코딩
      • 생활코딩 Express.js
      • 점프 투 장고
      • 생활코딩 Node.js
    • 프로젝트 N
      • DevQuest N

인기 글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.2
아사_
[JavaScript] 클로저
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.