TIL09⎟JavaScript : Closure 클로져

itssweetrain·2021년 1월 9일
0

JavaScript 

목록 보기
8/25
post-thumbnail

https://ko.javascript.info/closure
-수정중-

Closure

클로저는 외부 변수를 기억하고 이 외부 변수에 접근할 수 있는 함수를 의미

자바스크립트는 함수 지향 언어. 함수를 동적으로 생성할 수 있고, 생성한 함수를 다른 함수에 인수로 넘길 수 있으며, 생성된 곳이 아닌 곳에서 함수를 호출할 수도 있기 때문입니다.

함수 내부에서 함수 외부에 있는 변수에 접근할 수 있다는 사실!

####클로저를 이용하여 합 구하기

sum(a)(b) = a+b와 같은 연산을 해주는 함수 sum을 두 개의 괄호를 사용해서 만들어보세요
ex) sum(1)(2) = 3
    sum(5)(-1) = 4

function sum(a){
    return function(b){
     return a + b ;
    };      //a는 외부 렉시컬 환경에서 가져옴
}
alert(sum(1)(2)); //3

코드 블록

코드 블록 {...} 안에서 선언한 변수는 블록 안에서만 사용할 수 있다.

for (let i = 0; i < 3; i++) {
  // 변수 i는 for 안에서만 사용할 수 있습니다.
  alert(i); // 0, 1, 2가 출력
}

alert(i); // ReferenceError: i is not defined
let i는 {...} 밖에 있긴 하지만 for 옆 괄호 안에서 선언한 변수는 블록 {...}에 속하는 코드로 취급된다는 점에서 조금 특별합니다.
1.

function sayHiBye(firstName, lastName) {

  function getFullName() {

   return firstName + " " + lastName;

}

alert(‎ "Hello, " + getFullName() );

}

 

2.

function sayHiBye(firstname, lastname){

alert(‎"Hello,"+firstname+" "+lastname);

}

렉시컬 환경

자바스크립트에선 실행 중인 함수, 코드 블록 {...}, 스크립트 전체는 렉시컬 환경(Lexical Environment) 이라 불리는 내부 숨김 연관 객체(internal hidden associated object)를 갖는다.
렉시컬 환경 객체는 두 부분으로 구성
1. 환경 레코드(Environment Record) - 모든 지역 변수를 프로퍼티로 저장하고 있는 객체
2. 외부 렉시컬 환경(Outer Lexical Environment)에 대한 참조 - 외부 코드와 연관

변수는 환경 레코드의 프로퍼티일 뿐. '변수를 가져오거나 변경하는 것'은 '환경 레코드의 프로퍼티를 가져오거나 변경'함을 의미

  • 변수는 특수 내부 객체인 환경 레코드의 프로퍼티입니다. 환경 레코드는 현재 실행 중인 함수와 코드 블록, 스크립트와 연관
  • 변수를 변경하면 환경 레코드의 프로퍼티가 변경
profile
motivation⚡️

0개의 댓글