[JavaScript] Scope 스코프

Suvina·2025년 2월 24일

JavaScript

목록 보기
28/28
post-thumbnail

👉 스코프 → 클로저

*함수는 자바스크립트에서 클로저 역할을 하기 때문에 스코프를 생성하므로 함수 내에 정의된 변수는 외부 함수나 다른 함수 내에서는 접근 할 수 없다.*

스코프

  • 선언된 변수에 대해서 접근할 수 있는 유효한 범위를 의미한다. 만약, 변수가 해당 스코프에 존재하지 않다면 사용할 수 없다.
  • 계층적인 구조를 가지기 때문에 하위 스코프는 상위 스코프에 접근할 수 있지만, 상위 스코프는 하위 스코프에 접근할 수 없다.
    var globalVar = "I am a global variable";
    
    function outerFunction() {
      var outerVar = "I am in the outer function";
        console.log(innerVar); // innerVar is not defined
    
      function innerFunction() {
        var innerVar = "I am in the inner function";
        console.log(outerVar); // I am in the outer function
      }
      innerFunction();
    }
    
    outerFunction();

동작에 따른 구분

  1. 정적 스코프(렉시컬 스코프) ✅Javascript

    1. 함수를 선언한 시점에 스코프를 결정한다. “어디서 선언” 되었느냐에 따라 함수 유효범위가 달라짐
    function name () {
    	var name = "Janet";
    }
    function getName () {
    	console.log(name);
    }
    getName(); // undefined
  1. 동적 스코프

    1. 함수를 호출한 시점에 스코프를 결정한다. “어디서 호출” 했느냐에 따라 함수 유효범위가 달라짐

      Lisp, Emacs Lisp, Perl

    var name = "Tom"
    function myName () {
    	var name = 'Janet';
    	getName();
    }
    function getName() {
    	console.log(name);
    }
    myName(); // Janet

레벨에 따른 구분

전역 스코프 (Global Scope)

  • 전역 변수*에 대해 접근과 조작이 가능한 유효한 범위

    전역 변수* : 어떠한 함수에도 속하지 않은 상태이고, 어떠한 중괄호 안에 들어있지 않은 상태

let global = "Global"; // 전역 변수
function scope () {
	let local = "Local!"; // 지역 변수
	console.log(global);
}
scope(); // Global!
console.log(local); // local is not defined

지역 스코프 (Local Scope)

  • 변수가 함수 혹은 블록 내에서 접근이 가능한 유효한 범위

2-1. 함수 레벨 스코프 : 선언한 변수가 함수 내에서 유효한 범위

var로 선언된 변수, 함수들은 함수 레벨 스코프가 된다.

function hi (name) {
	if (name) {
		var greeting = "Hello" + name;
	}
	console.log(greeting);
}
hi("Janet"); // Hello Janet

2-2. 블록 레벨 스코프 : 선언한 변수가 블록(중괄호 내)에서 유효한 범위

•  let 과 const 로 선언된 변수, 함수들은 블록 레벨 스코프가 된다.

💡 참고로, 함수 레벨 스코프는 블록 레벨 스코프보다 더 넓은 범위를 가지므로 편리하기도 하지만 반대로 코드에 대한 복잡성을 증가시키는 요인이 된다.

function hi(name) {
	if (name) {
		let greeting = 'Hello ' + name;
	}
	console.log(greeting);
}
    
hi('Janet'); // greeting is not defined

스코프 체인

  • 현재 스코프 레벨에서 참조값이 없는 경우 상위 레벨의 스코프에서 참조값을 찾아 나가는 현상을 의미한다.
  • 이 찾는 과정은 스코프를 안에서 바깥쪽으로 단계적으로 탐색하는 과정이다. (내부 -> 외부 -> 전체)
  • 만약 전역 스코프에도 참조값이 없다면 null을 반환하게 된다.
profile
개인공부

0개의 댓글