• 변수의 범위(scope)가 코드의 구조에 따라 결정되는 방식
  • 즉, 함수가 정의된 위치에 따라 어떤 변수에 접근할 수 있는지를 결정한다.
  • JavaScript에서는 렉시컬 스코프를 따른다.

특징

1. 함수가 정의된 위치에 따라 그 함수가 접근할 수 있는 변수의 범위가 결정된다. (함수가 호출되는 위치와는 무관)

2. 함수 안에 다른 함수를 정의할 수 있다. 내부 함수는 외부 함수의 변수에 접근할 수 있지만 반대는 성립되지 않는다.

function outer() {
    const outerVar = 'I am outer';

    function inner() {
        console.log(outerVar); // 'I am outer' 출력
    }

    inner();
}

outer();

3. 전역에서 정의된 변수는 모든 내부 함수에서 접근할 수 있지만, local에서 정의된 변수는 그 지역의 함수 내에서만 접근할 수 있다.

const globalVar = 'I am global';

function myFunction() {
    const localVar = 'I am local';

    console.log(globalVar); // 'I am global' 출력
    console.log(localVar); // 'I am local' 출력
}

myFunction();
console.log(localVar); // ReferenceError 발생

렉시컬 스코프와 클로저(Closure)

  • 렉시컬 스코프와 관련된 중요한 개념 중 하나는 클로저(closure)이다.
  • 클로저는 함수 안에 있는 함수로, 외부 함수의 변수를 기억하고 사용할 수 있는 내부함수이다.
function myHouse() {
  let toy = "축구공";

  function playGround() {
    console.log(toy); // '축구공'을 출력
  }

  return playGround;
}

let play = myHouse();
play(); // '축구공'을 출력
  • myHouse 함수는 toy라는 장난감을 가지고 있다.
  • playGround 함수는 toy를 기억하고 있고,
  • 나중에 playGround 함수를 실행할 때 toy를 사용할 수 있다.

'코린이 개념잡기 > JavaScript' 카테고리의 다른 글

자바스크립트 this  (0) 2025.01.03
웹 브라우저의 동작 원리  (1) 2024.12.28
var, let, const  (0) 2024.12.28
얕고(Shallow), 깊은(Deep) 복사(Copy)  (1) 2024.12.20
==와 ===의 차이  (0) 2024.12.20

+ Recent posts