Web Dev/1. JS 문법 관련

ES6의 스코프

hYhY1234 2021. 5. 20. 21:02
728x90

https://stackoverflow.com/questions/30287977/es6-module-scope

 

ES6 module scope

I have the code: // lib.js var a = "a"; export var b = "b"; // main.js console.log(a); // "a" variable is not available in a global scope import {b} from "lib"; console.log(a); // is "a" variable

stackoverflow.com

ES6의 스코프에 대해서간략한 정리

 

기존에는 var 키워드를 사용하면 전역에 등록되고 그랬는데, 이제는 ES6 모듈내에서는 var키워드를 사용한다고 해도 모듈 스코프에 등록된다. 하지만 var는 애초에 쓸생각을 하지말자. 

  • Global scope
  • Module scope
  • Function scope
  • Block scope

스코프는 위와 같이 있다. 

 

A.js에서 

let obj = {
    state: "value",
    setState(newState) {
        console.log("newState", newState)
        this.state = newState;
    },
    getState() {
        console.log(this.state);
    }
}
   
export default obj;

이런식으로 object가 있을때 여러 모듈에서 obj를 import해서 쓸경우가 생겼는데, 갑자기 이해가 안된적이 있었다. 

 

// B.js
import { obj } from "./A.js"

obj.setState("B에서 바꿉니다");

// C.js
import { obj } from "./A.js"

obj.setState("C에서 바꿉니다");

 

이렇게 여러 파일에서 A모듈에 접근하면 최초에 번들에 포함될때 A.js 가 평가가 되고, 그다음엔 동일한 인스턴스를 사용한다. 

 

아래 글에 메모해놓은 곳에서 설명이 잘 되어있다. 

https://mytutorials.tistory.com/378

 

Modules

내가 내용을 따로 정리할건 없는데, 매번 https://javascript.info/modules-intro Modules, introduction javascript.info 이글을 보고있다. 그런데 돌아서면 까먹고 까먹고 그렇군. 여하튼 요지는 require등등의..

mytutorials.tistory.com