본문 바로가기
front/js

자바스크립트 클로져(Closures )

by juniKang 2022. 6. 30.

함수와 변수의 범위

클로져 를 알아보기전에, 변수의 범위를 복습해보자.

function myFunc() {
  const Hello = "안녕"
  console.log(Hello) //✔ Hello를 호출할 수 있다.
}
console.log(Hello) //❌ Hello를 호출 할 수 없다.

함수 안에 또 함수를 만들면 안쪽 함수에서는 바깥 함수의 변수를 사용할 수 있지만, 바깥함수에서는 안쪽함수의 범위에 접근할 수 없다.

function myFunc() {
  const Hello = "안녕"
  
  function innerFunc() {
    const Nihao = "니하오"
  	console.log(Hello) //✔ Hello를 호출할 수 있다.
  }
  console.log(Nihao) //❌ Nihao를 호출 할 수 없다.
}

이 변수의 범위를 기억하고 클로져를 알아보자.


클로져 (폐쇄)

클러져는 안쪽함수가 선언된 위치에 있는 변수들안쪽함수의 결합이다.

 

아래 예제를 콘솔에서 실행해보자.

function makeGreeting(greeting) {  
  function innerFunc() {
    return greeting;
  }
  return innerFunc;
}

const koreanGreeting = makeGreeting("안녕하세요");
const chineseGreeting = makeGreeting("Nihao");
koreanGreeting(); // 안녕하세요
chineseGreeting(); // Nihao

자바스크립트에서는 값을 변수에 저장한다. 바깥함수에서  "안녕하세요"를 받고, 바깥함수의 실행이 끝났지만,  "안녕하세요"는 사라지지 않고 innerFunc에 저장되었다.

 

그래서 koreanGreeting() 을 실행하면 '안녕하세요' 가 나오게된다. koreanGreeting에 저장된, 안쪽 함수와 바깥 함수의 변수의 결합을 클로져라고 한다. 콘솔에서 koreanGreeting을 입력해보면, 클로져의 모양을 볼 수 있다.

'front > js' 카테고리의 다른 글

[javascript] falsy  (0) 2022.07.26
[에러]TypeScript language service died unexpectedly 5 times in the last 5 minutes  (0) 2022.07.23
javascript xlsx 엑셀 업로드 방법  (0) 2022.06.17
Functions  (0) 2022.05.30
Using Promises  (0) 2022.05.29

댓글