closure

real_Jin·2021년 4월 29일
0

JavaScript

목록 보기
1/1

📝 closure

  • closure를 이해하기 위해선 javaScript가 어떻게 변수의 유효범위를 지정하는지(Lexical scoping) 이해해야함

  • lexical : 어휘적 범위 지정(lexical scoping) 과정에서 변수가 어디에서 사용 가능한지 알기 위해,
    그 변수가 소스코드 내 어디에서 선언되었는지 고려한다는 것을 의미

  • 자바스크립트는 함수를 리턴하고, 리턴하는 함수가 closure 형성

  • 클로저는 함수와 함수가 선언된 어휘적 환경의 조합

  • 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성

Example

function makeAdder(x) {
  var y = 1;
  return function(z) {
    y = 100;
    return x + y + z;
  };
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);
//클로저에 x와 y의 환경이 저장됨

console.log(add5(2));  // 107 (x:5 + y:100 + z:2)
console.log(add10(2)); // 112 (x:10 + y:100 + z:2)
//함수 실행 시 클로저에 저장된 x, y값에 접근하여 값을 계산

Description

  • makeAdder(x) : 단일 인자 x를 받아서 새 함수 반환
    -> 반환되는 함수는 단일 인자 z 를 받아서 x와 y와 z의 합 반환
    -> add5, add 10 두 개의 새로운 함수 만들기 위해 makeAdder 사용
  • add5 add10 : 두 개 모두 closure
    서로 다른 맥락적 환경을 저장, 같은 함수 본문 정의 공유

(참고 문서 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures)

Thinking 💭

javaScript 함수 안에서, 당연하게 변수 선언하고 사용하는데 의문을 갖고 더 알아봤다.
lexical...
private method도 다룰 예정

.

profile
🍀😸💻📷📝🌻

0개의 댓글