[코드스테이츠 Day 13] 스코프와 클로저 Scope & Closure

Strawberry Oolong Tea·2021년 9월 8일
0

TODAY I LEARNED

목록 보기
22/51
post-thumbnail

스코프(Scope): 범위

스코프는 함수 또는 코드 블록을 기준으로 안쪽과 바깥쪽으로 나뉘는 것을 말한다.
안쪽에 있는 스코프는 바깥쪽의 스코프에 있는 변수에 접근할 수 있지만
바깥쪽에 있는 스코프는 안쪽의 스코프에 있는 변수에 접근할 수 없다.
스코프는 중첩이 가능하다.
가장 바깥쪽에 있는 스코프는 전역 스코프라고 한다.
전역이 아닌 다른 모든 스코프는 지역 스코프이다.
지역 변수는 전역 변수보다 높은 우선 순위를 가진다.

const halve = function(n) {
  return n / 2;
};

let n = 10;
console.log(halve(100)); // 50
console.log(n) // 10;

전역 스코프 Global scope

함수나 코드 블록 외부에서 정의한 변수의 범위는 프로그램 전체이고 이는 어디서든지 참조할 수 있다.

지역 스코프 Local scope

함수의 매개 변수나 함수 안에서 선언한 변수는 해당 함수에서만 참조할 수 있다.

블록 스코프 Block scope

중괄호 { } 기준으로 구분되는 범위를 말한다.

함수 스코프 Function scope

function 키워드가 등장하는 함수 선언식 또는 함수 표현식은 함수 스코프를 만든다.
화살표 함수는 블록 스코프로 취급된다.

const myGuacamole = function(factor) {
  const ingredient = function(amount, name) {
    let ingredientAmount = amount * factor;
    if (ingredientAmount > 0) {
      name += 's';
    }
    return `${ingredientAmount} ${name}`;
  }
  return `${ingredient(0.5, 'avocado')} ${ingredient(1, 'tomato')} ${ingredient(0.5, 'onion')}`
}

클로저(Closure): 폐쇄

클로저는 함수와 함수가 선언된 언어적(lexical) 환경의 조합을 말한다.
자바스크립트는 함수가 호출되는 환경과는 별개로 기존에 선언되어 있던 환경(언어적 환경)을 기준으로 변수를 조회하려고 한다.

클로저 함수는 외부 함수의 실행이 종료된 후에도
외부 함수의 스코프(함수가 선언된 언어적 환경)에 접근할 수 있다.

클로저의 활용

데이터를 보존하는 함수

정보의 접근 제한(캡슐화)

재활용 가능한 함수(모듈화)

profile
Der Vogel kämpft sich aus dem Ei 🥚🐣 목표를 위해 끊임없이 자신의 세계를 깨뜨릴 수 있는 용감한 개발자가 되고 싶습니다.

0개의 댓글