[JS] Scope & Closure

soor.dev·2021년 3월 17일
0

Java Script

목록 보기
25/26
post-thumbnail

Scope

변수 접근 규칙에 따른 유효범위
자바스크립트에서는 함수단위로 스코프를 갖는다

local scope & global scope

global scope는 local scope에 사용 가능하지만, local scope에 정의된 변수는 바깥쪽에서 사용이 불가하다.

let greeting = 'Hello';
function greeSomeone() {
  let firstName = 'Josh';
  return greeting + ' ' + firstName;
}
greetSomeone(); // 'Hello Josh'
firstName; // ReferenceError

function scope & block scope

function scope : 함수 단위 (var)로 나눠지는 범위이다.
block scope : 중괄호 단위(let, const)로 시작하고 끝나는 범위이다.

var, let, const

var : 함수 단위로 자신만의 scope를 갖는다. (재선언, 재할당 가능)

  • global scope에서 선언된 함수, 그리고 var키워드를 이용해서 선언된 변수는 window객체와 연결됨

let : block 단위로 scope를 구분했을 때 예측하기 쉬운 코드를 작성할 수 있다. (재선언, 재할당 가능)

const : block 단위로 scope를 구분한다. (재선언, 재할당 불가능)


Closure

Closure의 정의와 특징

  • 클로저는 함수와 함수가 선언된 어휘적환경(lexical environment)의 조합을 말한다. 함수 내에서 다른 함수(내부 함수)가 리턴되면 이 함수를 클로저함수라고 부르고, 외부함수에 있는 변수에 접근 가능한 특징을 가지고 있다.

Closure를 활용해서 외부함수의 변수에 접근하기

리턴 함수가 x에 접근할 수 있기 때문에 addX가 클로저를 사용하고 있다고 볼 수 있다

let addX = function(x) {
  return function(y) {
    return x + y;
  };
};

굳이 왜 closure 함수를?

  • 안에서 밖으로 접근은 가능한데, 밖에서 안으로 접근은 불가하다. 그러므로 외부에서 자신의 함수에 접근하지 못하게 은닉하려고 클로저 함수를 쓰는 경우가 있다.

읽어볼 것

0개의 댓글