Scope

JBoB·2023년 1월 30일
0

🐧Scope란?

Scope는 직역하면 “범위”라는 뜻이다.

Scope는 변수에 접근할 수 있는 범위이다. 이를 풀어서 말하면 스코프 는 변수 이름이나 함수 이름과 같은

식별자(변수)의 수명을 결정하고 확인 할수 있는 범위이다. 변수나 함수와 같은 모든 식별자들은 어느 위치에서 선언되었느냐에 다라 다른 코드가 자신을 참조할 수 있는지 여부가 결정되며, 이를 스코프라고 하는 것이다.

🐤Java Script의 특징

🐙레벨

자바스크립트에서는 함수레벨 스코프 를 사용한다.

함수 레벨 스코프

  • 함수 코드 블록 내에서만 접근 가능한 범위
var x = 0;
{
  var x = 1;
  console.log(x); // 1
}
console.log(x);   // 1

🐙동작

**정적(static) 스코프 ⇒ 한번 정해놓으면 변경이 안되는 것.**

  • 함수가 어디서 선언되었는지에 따라 스코프가 결정된다.
var num = 100;
function foo() {
  var num = 10;
  console.log(`foo : ${num}`);
  bar();
}
function bar() {
  console.log(`bar : ${num}`);
}
foo();
//foo : 10
//bar : 100

foo 함수 호출시 foo는 10이고 bar는 100으로 나온다.그러는 이유는 함수를 어디서 선언해줬냐에 따라 다르기 때문이다. foo함수는 num를 스코프 안에 선언해준 것을 받아오고 있고 bar는 foo안에 있는 함수는 받아올수 없다. 접근할수 없는 범위에 있기 때문에 첫번째줄은 num = 100을 받아온다.

**동적(dynamic) 스코프 ⇒ 실시간으로 상황에 따라 변경이 가능한 것.**

  • 함수가 호출될 때 생성되는 스코프
  • 함수가 어디서 호출 되었는지에 따라서 스코프가 결정된다.

🐤Scope의 종류

전역 스코프

  • 가장 바깥의 영역을 의미한다.
  • 전역 스코프에서 선언한 변수를 전역 변수라고 한다.
var global = 'global';

function foo() {
  var local = 'local';
  console.log(global);
  console.log(local);
}
foo();

console.log(global);

전역 스코프에서 선언한 전역 변수는 어디서든 참조가 가능합니다.

지역 스코프

  • 함수 내부 혹은 블록 내부의 영역을 의미한다.
  • 지역 스코프에선 선언한 변수를 지역 변수라고 한다.
var a = 10;     // 전역변수

(function () {
  var b = 20;   // 지역변수
})();

console.log(a); // 10
console.log(b); // "b" is not defined. b는 지역 변수이다.

예제) 전역변수와 지역변수가 중복 선언된 경우

var x = 'global';

function foo() {
  var x = 'local';
  console.log(x);
}

foo();          // local
console.log(x); // global

전역 영역에서는 전역변수 만이 참조가능하고,

변수명이 중복된경우 지역변수를 우선 참조한다.

profile
간절하고 치열하게 살자

0개의 댓글