Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 세마포어란?
- 호스팅
- 싸피
- 싸피 면접 후기
- 최단 경로
- SSAFY
- 싸피 합격
- 호스팅이란?
- Synchronization
- 클라우드 서버
- 프록시서버
- 세마포어와 뮤텍스의 차이
- 동기화
- 플로이드 와샬
- Proxy Server
- 뮤텍스란?
- 세마포어
- 세마포어와 뮤텍스
- 뮤텍스
- 삼성 청년 SW 아카데미
- 다익스트라 알고리즘
- 다익스트라
- Proxy
- 웹 호스팅
- 플로이드 워셜
- 서버 호스팅
- floyd-warshall
- 프록시
- Dijkstra Algorithm
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[자바스크립트] var, let의 전역객체에 대해서... 본문
ES6 이후 나온 let과 const에 대해서 알아봤다. 그렇다면 조금 특수한 상황에 대해서 알아보도록 하자!
var a = 10
console.log(window.a)
console.log(a)
delete a
console.log(window.a)
console.log(a)
다음 예제의 결괏값들이 어떻게 나올까? 첫 번째와 2번째는 10이 찍히고 delete a를 했기 때문에 뒤에 나머지 값들은 reference error나 undefined를 생각할 것이다. 하지만 실제 결괏값은 4개 전부다 10이 찍힌다.
var a = 10
console.log(window.a)
console.log(a)
delete window.a
console.log(window.a)
console.log(a)
그렇다면 반대로 window.a를 삭제하고 console.log()을 해보면? 똑같이 10이 찍힌다.
window.a = 10;
delete a
하지만 다음과 같이 새롭게 window.a에 직접 10을 선언해주고 delete하면 잘 지워진다. 왜 그러는 것일까? 둘 다 똑같은 전역 객체인데 var는 지울 수 없고 window에 직접적으로 선언하는 건 지워질까? 그건 var에 선언하면 전역변수임과 동시에 전역 객체의 프로퍼티가 되기 때문이다.
따라서 전역객체를 삭제하려고 하면 전역 변수이기 때문에 함부로 지울 수 없다. 반대로 전역 변수를 삭제하려고 해도 전역 변수이기 때문에 자바스크립에서 삭제할 수 없다고 하는 것이다.
이런 이유가 있기 때문에 전역변수 선언을 피하고 최소화 하자!
let c = 30;
console.log(window.c); // undefined
console.log(c); // 30
이제 let을 쓰면서 전역변수와 전역 객체는 별개의 공간이 되었다!!
앞으로 var는 쓰지 않도록 하자.
출처
'공부 > JavaScript && jquery' 카테고리의 다른 글
[자바스크립트] Tag Function (0) | 2021.04.26 |
---|---|
[자바스크립트] forEach, map, reduce (0) | 2021.04.26 |
[자바스크립트] Object.freeze와 Deep Copy(assign) (0) | 2021.04.26 |
[자바스크립트] ES6에서의 this 바인딩 (0) | 2021.04.26 |
[자바스크립트][ES6] 함수 스코프, 블록 스코프 (0) | 2021.04.26 |
Comments