어제의 나보다 성장한 오늘의 나

[자바스크립트] var, let의 전역객체에 대해서... 본문

공부/JavaScript && jquery

[자바스크립트] var, let의 전역객체에 대해서...

NineOne 2021. 4. 26. 21:01

gooweon.tistory.com/130

 

var, let, const에 대해서

let, const는 ES6에 나온 문법이다. var와 비슷한 성질을 가지고 있지만 다르다! 예제를 통해 이후부터 var는 쓰지 말도록 하자! 'use strict'; age = 4; console.log(age); var age; name = goo; console.log(nam..

gooweon.tistory.com

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는 쓰지 않도록 하자.

 

 

출처

Comments