var로 선언된 전역 변수 및 전역 함수는 window 객체에 속하게 된다
브라우저에는 window라는 객체가 존재하는데 이는 브라우저 창을 대표하는 객체이다
하지만 창과 관계없이 별개로 전역 항목도 담고 있다.
var로 선언된 전역 변수와 전역 함수가 window 객체에 속한다.
var name = '춘리';
console.log(window.name); // 춘리
function foo() {
console.log('ryu');
}
console.log (foo === window.foo); // true
전역 변수는 어디서나 접근 가능한 편리한 변수지만 대신 다른 함수나 로직에 의해 의도치 않은 변경이 있을 수 있다. 애플리케이션을 만들 때는 내가 직접 작성하지 않은 수많은 다른 함수와 로직이 포함되기 때문인데, 이를 부수 효과(side effect)라고 부른다. 때문에 전역 변수를 최소화 하는 것이 좋다.
그러므로 let
이나 const
를 주로 사용하는 것이 낫다. var
는 블록 스코프를 무시하며, 재선언을 내도 에러를 내지 않는다. 반면에 var
로 선언하는 것은 브라우저의 내장 기능을 사용하지 못하게 만들 수도 있습니다.
또한 선언 (var
, let
, const
) 없이 변수를 할당하면 안된다. 선언 없이 변수를 할당하면, 해당 변수는 var로 선언한 전역 변수처럼 취급됩니다.
이런 실수를 방지하고 싶다면 Strict Mode
를 사용할 수 있다. Strict Mode는 브라우저가 보다 엄격하게 작동하도록 만들어줍니다. 앞서 언급한 것처럼 "선언 없는 변수 할당"의 경우도 Strict Mode는 에러로 판단합니다.
Strict Mode를 적용하려면, js 파일 상단에 'use strict' 라고 입력하면 됩니다. (따옴표 포함)