이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

[JavaScript] 스코프

  • 2022.03.10 20:57
  • Programming Language/JavaScript

 

 

 

자바스크립트에서의 변수 스코프는 자바에서의 스코프와 유사하다.

변수를 선언할 때 var키워드를 사용할 시 전역 변수로 취급될 수 있음에 유의하자.

 

 

렉시컬 스코프

 

 

자바스크립트는 렉시컬 스코프 방식을 따른다.

주어진 상황에서 결과값이 어떻게 출력되는지 예측해보자.

 

var x = 1;

function foo(){
  var x = 10;
  bar();
}

function bar(){
  console.log(x);
}

foo();
bar();

 

 

정답은 1 1 이다.

 

자바스크립트에서 함수의 스코프를 정의할 때 함수를 어디서 호출한지는 중요하지 않고, 함수가 정의된 위치에 따라 상위 스코프를 결정한다.

 

bar함수는 전역에서 정의된 함수이다. bar함수가 정의될 때 이미 스코프가 결정됐기에 전역변수로 선언된 1을 출력하게 된다.

 

 

 

함수 안에서의 변수

 

 

function foo(){
  var x = 1234;
  return x;
}

console.log(x);

 

 

변수 호이스팅에 의해서 var x에는 undefined이 선언되어있을 것 같지만, 결과는 그렇지 않다. 실행 시 오류가 발생한다.

 

지금까지 알고 있었던 변수 호이스팅은 전역 변수에 대해서만 발생하고, 함수 내부에서 선언한 변수는 함수가 호출된 직후에 실행된다. (undefined로 초기화함)

 

즉 정리해보면, 변수 호이스팅은 스코프 단위로 발생한다고 할 수 있다.

 

 

전역 변수 줄이기

 

 

 

전역 변수가 많아지게 되면 상태를 변경할 수 있는 시간도 길고 기회도 많다는 것을 의미한다.

뿐만 아니라 전역 변수의 검색 속도도 느리고 오류가 발생할 수 있는 가능성도 높아지니 전역 변수의 사용을 최대한 억제해야 한다.

 

1. 즉시 실행 함수

 

모든 코드를 즉시 실행 함수화하면 변수는 지역 변수가 된다.

 

 

2. 객체 활용

 

let variables = {};

variables.a = "b";

 

전역 변수로 사용할 변수들을 프로퍼티로 관리한다.

 

 

// 클로저 배우고 더 추가하기

 

 

3. ES6 모듈

 

독자적인 모듈 스코프를 사용한다. 

var키워드로 선언한 변수는 더 이상 전역 변수가 아니게 된다.

 

 

 

반응형

'Programming Language > JavaScript' 카테고리의 다른 글

[JavaScript] DOM  (0) 2022.10.03
[JavaScript] 정리 (1)  (0) 2022.09.28
[JavaScript] 함수  (0) 2022.03.10
[JavaScript] 타입 변환 / 단축 평가  (0) 2022.03.08
[JavaScript] 연산자 / 제어문  (0) 2022.03.08

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [JavaScript] DOM

    [JavaScript] DOM

    2022.10.03
  • [JavaScript] 정리 (1)

    [JavaScript] 정리 (1)

    2022.09.28
  • [JavaScript] 함수

    [JavaScript] 함수

    2022.03.10
  • [JavaScript] 타입 변환 / 단축 평가

    [JavaScript] 타입 변환 / 단축 평가

    2022.03.08
다른 글 더 둘러보기

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (606)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (69)
      • Operating System (18)
      • Computer Network (17)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (13)
    • Life Logs (0)
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바