길잃은곰
길을 잃어 떠도는 곰
길잃은곰
전체 방문자
오늘
어제
  • 분류 전체보기 (87)
    • Algorithm (6)
    • HTML, CSS (9)
    • Frontend (1)
    • SW공학 (1)
    • WEB (4)
    • Javascript (29)
    • Typescript (0)
    • React (8)
    • Computer Science (11)
    • NEWS (0)
    • TIL(WIL) (4)
    • ETC (5)

블로그 메뉴

  • ✨깃허브
  • 홈
  • 태그
  • 방명록

인기 글

태그

  • element
  • Es5
  • javascript2016
  • VW
  • root-element
  • EM
  • ES8
  • ES6
  • 코드트리
  • Pixel
  • JavaScript
  • 자바스크립트
  • 코테
  • 연탄
  • js2016
  • PX
  • ES7
  • REM
  • %
  • VH
hELLO · Designed By 정상우.
길잃은곰

길을 잃어 떠도는 곰

Javascript

[JavaScript] 스코프, 스코프 체인 , 렉시컬 스코프

2023. 1. 9. 18:19

스코프 ( Scope )

스코프란 유효 범위로, 정의되어 있는 변수를 사용할수 있는 영역을 의미한다.

자바스크립트에는 크게 2가지 타입의 스코프가 있는데 전역 ( Global ) 과 지역 ( Local ) 로 나뉜다.

전역 상태란 함수의 외부에서 선언된 변수로, 

Local 상태는 함수안에 선언된 변수로, 그 함수에 대해 지역 변수를 갖는다. 지역 변수는 지역 범위 ( Local Scope ) 를 갖는다.

let a = 1;
function foo() {
  let b = 2;
  function bar() {
    let c = 3;
    console.log(a + b + c); // 6
  }
  bar();
}

위 코드에서 a, b, c 는 모두 변수이다. a, b, c 는 모두 foo() 함수 내부에서 선언되었기 때문에 foo() 함수 내부에서만 사용할 수 있다. 이처럼 변수가 선언된 위치에 따라서 변수의 유효 범위가 결정되는 것을 스코프라고 한다.

참고로 var, let, const 도 Scope 의 차이가 난다.

2023.01.09 - [Javascript] - [JS] var, let, const 의 차이점 ( Feat. 호이스팅 )

함수 레벨 스코프와 블록 레벨 스코프로 나뉘는데, {} 를 기준으로 나뉜다.

var 는 함수 레벨 스코프, let, const 는 블록 레벨 스코프이다.

스코프 체인 ( Scope Chain )

스코프 체인이란, 자바 스크립트 엔진은 식별자를 찾을때 일단 자신이 속한 스코프부터 위로 올라가면서 찾아가는 과정을 거친다. 이 과정을 스코프 체인이라고 하며 스코프가 중첩되어 있는 모든 상황에서 발생한다.

var a = 1;
var b = 2;
function foo() {
  var a = 3;
  var b = 4;
  console.log(a, b); // 3, 4
  function bar() {
    var a = 5;
    var b = 6;
    console.log(a, b); // 5, 6
  }
  bar();
}
console.log(a, b); // 1, 2

 

렉시컬 스코프 ( Lexical Scope )

렉시컬 스코프란 정적 스코프로, 함수를 호출한 곳이 아닌 선언한 곳을 기준으로 스코프를 결정하는 원칙을 의미한다.

어디서 호출했는지에 따라 정해지는 동적 스코프의 반대 개념으로, 대부분의 프로그래밍 언어는 렉시컬 스코프를 이용한다.

위 코드에서 foo 함수 내부에서 bar 함수를 호출하면 bar 함수의 스코프는 foo 함수의 스코프가 된다.

이때 bar 함수의 스코프는 Foo 함수의 스코프가 된다.

 

Reference

http://www.tcpschool.com/javascript/js_function_variableScope

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

저작자표시 비영리 동일조건 (새창열림)

'Javascript' 카테고리의 다른 글

[JavaScript] 자바스크립트를 멀티 스레드처럼 사용하는 방법  (0) 2023.01.09
[JavaScript] 실행 컨텍스트 그리고 클로저  (0) 2023.01.09
[JS] var, let, const 의 차이점 ( Feat. 호이스팅 )  (0) 2023.01.09
[JS] Virtual DOM 과 Real Dom 의 차이점  (0) 2023.01.06
[JS] Callback, Promise 그리고 Async/Await  (0) 2023.01.06
    'Javascript' 카테고리의 다른 글
    • [JavaScript] 자바스크립트를 멀티 스레드처럼 사용하는 방법
    • [JavaScript] 실행 컨텍스트 그리고 클로저
    • [JS] var, let, const 의 차이점 ( Feat. 호이스팅 )
    • [JS] Virtual DOM 과 Real Dom 의 차이점
    길잃은곰
    길잃은곰

    티스토리툴바