저장을 습관화

자바스크립트 스코프 (scope, 유효 범위) 본문

공부/JavaScript

자바스크립트 스코프 (scope, 유효 범위)

ctrs 2023. 8. 6. 22:12

지역 변수 - 함수 내부에서 선언된 변수

함수 내부에서만 사용 가능하다. 함수 밖에서는 사용할 수 없다.

 

전역 변수 - 함수 외부에서 선언된 변수

해당 파일 내에서라면 전체에서 사용될 수 있다.

 

예시 1.

 

코드

// 전역 변수
let example1;
const minus = (a, b) => {
  example1 = a - b;
};

minus(100, 50);
console.log(example1); // 50
// 함수 minus의 정의 이전에, 변수 example1은 선언하였다.
// 함수 minus의 로직에 따라 변수 example1에는 함수 minus의 실행 결과가 저장되었다.
// 함수 minus를 실행하고, 함수 minus의 범위 밖에서 출력하였고, 함수 minus의 실행 결과가 출력되었다.
// 이를 통해 변수 example1은 함수 minus의 안팎에서 모두 사용 가능한 것을 확인할 수 있었다.



// 변수에 익명함수 형태로 함수 정의
const multiply = (a, b) => {
  const result = a * b;
  return result;
};

const m = multiply(10, 10);
console.log(m); // 100
// 함수 multiply의 실행하고 a*b의 결과인 100을 변수 result에 담아 리턴했으나, 
// 함수 실행의 결과는 어디까지나 a*b의 값인 100이지, 변수 result 그 자체가 아니다.



// 지역 변수
const sum = (a, b) => {
  const resultSum = a + b;
  return resultSum;
};

const s = sum(20, 30);
console.log(s); // 50
console.log(resultSum); // ReferenceError: resultSum is not defined
// 함수 sum의 실행 결과를 
// 함수의 범위 밖에서 변수 s에 할당한다고 선언하였다.
// 함수 밖에서 선언한 변수 s는 이상없이 사용이 가능했으나
// 함수 안에서 선언했던 변수 resultSum은 정의되지 않았다는 에러가 발생한다.

 

실행

$ node test.js
50
100
50
C:(생략)\test.js:26
console.log(resultSum);
            ^

ReferenceError: resultSum is not defined
    at Object.<anonymous> (C:(생략)\test.js:26:13)
    at Module._compile (node:internal/modules/cjs/loader:1254:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
    at Module.load (node:internal/modules/cjs/loader:1117:32)
    at Module._load (node:internal/modules/cjs/loader:958:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:23:47

Node.js v18.16.0