TIL // scope, closure

900djob·7일 전
0

자바스크립트를 공부하면서
과정 중에 완벽하게 이해하지 못하고 따라가야할 때가 있다.
완벽하게 이해하는 것은 아니더라도 그 개념을 적당히 익히기만 해도
그 다음 진도와 이어지기 때문에 다시 공부하면서 차차 익혀가게 되기도 하는데
나는 익혔다고 생각한 개념이 문제와 연결될 때 응용이 되지 않을 때가 있다.

마음 한 구석에 아.. 제대로 공부해야될텐데.. 안되는데.. 하는 개념이 있었는데
그 중 하나가 scope와 closure이다.

그래서 다시 한 번 개념을 익히고 정리를 하려고 한다.

먼저 scope.

scope는 변수 접근 규칙에 따른 유효범위이다.
개념을 풀이한 것만 봤을 때는 뭔가 싶겠지만 간단히 말해서,

각 변수들이 사용할 수 있는 범위가 정해져 있다는 거다.

let greeting = 'hello';

function greetSomeone() {
  let firstName = 'Josh';
  return greeting + ' ' + firstName;
};

scope는 global scope와 local scope로 나뉘는데
위의 코드로 구분해봤을 때,
global scope는 위 코드 전체로 생각할 수 있고
local scope는 greetSomeone 함수 내부로 생각할 수 있다.

즉,
global scope는 최상단에서 어디든 접근할 수 있기 때문에
선언된 greeting이 함수 greetSomeone 안에서도 사용이 될 수 있는데
함수 안에서 선언된 firstName은 local scope에 속하기 때문에
함수 밖에서는 사용이 불가능하다.

그리고 변수를 선언할 때 사용하는 키워드에 따라 그 유효범위도 달라지게 된다.

함수를 선언할 때 사용하는 키워드로는,
var, let, const가 있다.

각 키워드의 차이를 알아보면
function scope인 var은 함수단위로 범위를 가지고
block scope인 let과 const는 중괄호 단위로 범위를 가진다.

전역변수를 선언할 때는 var을 사용하는데
어디서든 접근할 수 있기 때문에 편해보이지만 사용에 유의해야 한다.
선언된 변수가 유효범위 안에 있어야 눈에 들어오고
뒤에서 재사용 할 우려가 있기 때문에 var보다는 let을 사용하는 것이 더 낫다.

const 같은 경우는 값이 변하지 않는 변수를 선언할 때 사용하는데
상수 같은 것들을 선언할 때 사용하면 된다.

정리해보면,

var : function scope / 재정의 가능 / 재선언 가능
let : block scope / 재정의 불가능 / 재선언 불가능
const : block scope / 재정의 불가능 / 재선언 불가능

두번째로 closure.

closure는 외부함수의 변수에 접근할 수 있는 내부함수인데
조금 더 쉽게 말하면,
함수 안에 새로운 함수를 생성할 때마다 closure를 생성한 것이다.

0개의 댓글