스코프(Scope)와 클로져(Closure)

Young Han·2021년 4월 22일
0

기술블로그

목록 보기
6/7
post-thumbnail

스코프란?

변수에 접근할 수 있는 범위 라고 볼 수 있다.
변수와 그 값이 어디서부터 어디까지 유효한지 판단하는 범위이다.

let greeting = 'Hello';

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

greetSomeone();	//Hello Nam
firstName;
VM427:1 Uncaught ReferenceError: firstName is not defined
    at <anonymous>:1:1

이는 firstName이란 변수가 정의된 적 없다는 에러가 발생하는데 이 이유는 무엇일까?
안쪽에 접근 할 수가 없기 때문에
그게 바로 scope라는 개념이다.

Local Scope 안쪽에서 선언된 변수는 밖에서는 사용이 불가하다.

지역 스코프(Local Scope)와 전역 스코프(Global Scope)

변수 접근 규칙에 따른 유효 범위

  • 안쪽 스코프에서 바깥쪽 스코프로는 접근할 수 있지만 반대로는 불가능
  • 스코프는 중첩이 가능
  • 가장 밖에 있는 스코프를 전역스코프, 안쪽에 있는 스코프를 지역스코프라 부른다.
  • 지역 변수는 전역 변수보다 더 높은 우선 순위를 가진다.

스코프의 종류

블록 스코프와 함수 스코프


보통의 경우에는 이 블록을 기준으로 Scope를 구분하는 단위로 생각할 수 있다.

for(let i=0; i<5; i++) {
  console.log(i); // 다섯번 iteration (0,1,2,3,4)
}
console.log('final i:', i); // ?

VM779:4 Uncaught ReferenceError: i is not defined
    at <anonymous>:4:25
(anonymous) @ VM779:4
  

for(var i=0; i<5; i++) {
  console.log(i); // 다섯번 iteration
}
console.log('final i:', i); // 5

let ,var, const 키워드 비교

클로져란?

외부함수의 변수에 접근할 수 있는 내부함수를 말한다.

function outter(){
    var title = 'coding everybody'; // 외부 함수
    return function(){  // 내부 함수
        alert(title);
    }
}
inner = outter(); // 결과값이 없다.
inner(); // 실행 결과는 alert(title);

클로저란 내부함수가 외부함수의 지역변수에 접근 할 수 있고, 외부함수는 외부함수의 지역변수를 사용하는 내부함수가 소멸될 때까지 소멸되지 않는 특성을 의미한다.

0개의 댓글