난 정말 최고야 멋있어
ydkjsy-scope-closures Chapter 4 본문
Why Global Scope?
Q. 어떻게 JS 엔진에서 여러 JS 파일들이 런타임에 하나로 될까요??
1. es module import
2. bundler -> 합쳐주세용!
3. 전역
Where Exactly is this Global Scope
웹에서는 window 객체를 통해서
-글로벌을 섀도잉하는 글로벌???
프로퍼티를 직접적으로 명시 한 후에 글로벌한 let 을 만들게 된다면
window.xxx 로 호출했을때 직접적으로 명시한 프로퍼티가 나오게 된다
let 은 그냥 가려지게 됨 ㅠㅠ,ㅠㅠㅠ
이걸 피하기 위해서 전역변수들은 항상 var 을 써서 선언을 하면 된다고 한다
-dom 전역
id 값이 유효한 문법적 이름을 가지고 있다면 lexical 변수가 생성된다고 한다
만약 그렇지 않다면 window 를 통해서 접근해야한다고 한다
근데 저자는 이런 전역변수들은 만들어진다고 해도 그냥 쓰지 말래유
- (window)name엔 뭐가 있니?
window.name 은 뭐든지 문자열로 만들도록 하는 게터/세터래요
그래서
var name = 42;
console.log(name, typeof name)
하면 42 string 이 나와요!! (왜냐면 window.name 은 이미 정해져있어서 섀도잉이 안일어난거에요)
(*근데 let name = 42 하고 typeof name 하면 number 나와요)
-Web Workers
웹워커는 메인 js 와 다르게 돌아가는 다른 js 쓰레드래요
아무래도 멀티쓰레드로 돌아가기 떔에 교착상태를 피하기 때문에 전역객체에 대한 제한들이 많대여
예를들면 DOM 전역객체엔 접근 못한다던가..
하튼 웹워커에선 self 를 통해서 글로벌객체의 레퍼런스에 접근할수있따고 합니다!!
근데 let 은 안되고 var 랑 function 은 가능!!
-DevTools/ REPL
슬로벌 스코프에서의 행동, 호이스팅, 블록스코핑 선언 요런것들은 좀 차이가 있ㅇ르수있대여
글로벌의 에뮬레이션이래요...=> JS Spec 과는 쫌 차이가 있을수 있대여
근데 대표적인 차이들을 설명을 안하네여;;
-ESM
es6에서 가장 짱짱기능 모듈기능 !!!!
export 를 해서 놓는다면
파일 하나만 있을땐 별 차이 없겠찌만 ,, 파일이 여러개가 있는 상황에서는 조금 달라져요
global 이 module-global 이 되버리는거져..
근데 뭐 이것도 결국은 글로벌에서 내려오는 머 그런거라고 하네요;;
해석은 되는데 잘 이해가 안가서.. 패쓰
-Node
어음... 노드는 esm 방식말고도 common js 방식으로도 export 할수있따고 해여
글고 노드는 글로벌스코프가 실제론 아니래여
왜냐면 다 함수로 바꿔버리거든요 var 도 let 도..
그래서 function Module*module, require, __dirname){
///어쩌고 저쩌고
}
로 다 바꿔버려서 글로벌이 없대여
그러면 노드에서 찐 글로벌에 접근하려면??
global 을 통해서 접근하래요(이건 노드만의 특징)
Global This
Globally Aware
TBD...