Front End/Javascript

[JS] Scope(스코프) 란 ?

TTOWA 2021. 12. 22. 18:42

Scope(스코프) 란 ?

  • 번역하면 '범위'라는 뜻을 가집니다. 즉, 변수에 접근할 수 있는 범위 입니다.
  • 그치만 단순 범위라고 정의하면 안됩니다. 선언하는 시점에 따라 값이 달라질수 있습니다.
  • 동작 스코프, 레벨 스코프로 나눌수 있습니다.

스코프의 종류

1.동작

-정적(Static) 스코프 

  • Javascript는 정적 스코프 특성을 가집니다.
  • 호출 스택과 관계없이 선언 시점에 스코프를 결정됩니다.

①레시컬(Lexical) 스코프

var name = '영수'; // 전역변수

function friend_1() {
  var name = '영미';
  second();
}

function friend_2() {
  console.log(name);
}

friend_1(); // 영수
friend_2(); // 영수

//함수를 어디서 호출 하는지가 아니라 어디에 선언하는지에 따라 결정 됩니다.

 

-동적(Dynamic) 스코프

  • 런타임 도중에 실행 컨택스트나 호출 컨낵스트에 의해 결정됩니다.
var name = '영수';

function friend(){
  var name = '영미';
  getName();
}

function getName(){
  console.log(name); 
  //정적 : 영수
  //동적 : 영미
}

friend();
//정적 : 함수 호출 할때가 아닌 선언할 때 스코프가 정해짐으로 영수가 출력됩니다.
//동적 : 런타임 도중에 실행 콘텍스트나 호출 콘텍스트에서 결정됨으로 영미가 출력됩니다.

2.레벨

-전역(Global) 스코프

  • 변수를 선언하면 javascript 코드 어디에서든 사용할수 있습니다.(함수에 속하지 않고 {} 괄호안에 들어있지 않는다.)
  • 변수명 충돌(중복)이 발생 할 수 있으므로 되도록이면 전역 변수 사용을 하지 않습니다.
  • ES6문법인 const, let 사용하여 선언하면 충돌(중복) 시 에러가 납니다.
let name = '영수'
let name = '영미'

//Identifier 'name' has already been declared

-지역(Local) 스코프

  • 특정 구역 내에서만 사용 가능 합니다.
  • 함수 스코프블록 스코프가 있습니다.

 

①함수(Function) 스코프

  • 함수 내 선언한 변수 접근은 해당 함수 안에서만 가능합니다.(외부에서 직접 변수 접근불가)
function friend(){
  var name = '영수'; //지역변수
  console.log(name);
}

friend(); //영수
console.log(name) //undefined

②블록(Block) 스코프

  • ES6문법인 let, const 선언된 변수, 함수( {} 관호안에서만 변수 접근가능)들이 블록 스코프가 됩니다.
  • 블록( {} )이 유효 범위 입니다.
function friend(name){
  if(name){
    let welcome = '나는 '+ name + ' 입니다.'
    console.log(welcome); //나는 영수 입니다. (접근가능)
  }
  console.log(welcome); //undefined (접근불가)
}

friend('영수');

 

이 글이 도움이 되었다면 ♡(공감)를 눌러 주세요.

 

반응형