[javascript]암묵적 전역변수 실습 – 안티패턴

오늘 출근하면서 “ppk 자바스크립트” 5장 코어를 보는 와중에 “var“를 선언하지 않은

변수는 함수 밖이든 안이든 모두 전역변수가 된다는 글을 보았습니다.

제 상식에는 함수 안에서 쓰면 무조건 지역변수가 되야 할 것 같은데 자바스크립트는

명시적으로 변수 앞에 “var“를 붙여주지 않으면 암묵적 전역변수가 된다고 합니다.

그래서, 아래 테스트코드를 만들어 보았습니다

<html>
<head>
<script src="../jquery.1.6.min.js"></script>
<script language="javascript">
$(document).ready(function() {
    globalVariableTest();
    print(x);
});
var print = function(val) {
    document.write("global variable x value : " + val);
}

function globalVariableTest() {
    var y = 4;  //함수내 지역변수
    x = y*2;    //암묵적 전역변수
}

</script>
</head>
<body>
</body>
</html>

결과는 변수 x를 선언하지 않았다는 오류가 나올것 같지만 의외로 아래와 같은 결과가

나옵니다.

globalVariableTest() 함수가 실행되면,  x는 암묵적으로 “전역변수“가 되어  document

body에 x의 값이 찍히는 것입니다.

하지만 이것은 “안티패턴“이라고 하네요.  되도록

  • 전역변수를 최소화하라
  • 변수를 선언할때는 명시적으로 “var“를 쓰고, 단일 var패턴을 사용하라.

저렇게 “자바스크립트 코딩기법과 핵심패턴“에 나와있다고 하네요. 저도 나중에 꼭

읽어볼 책입니다.

단일 var패턴“에 대해 궁금하시면 링크를 참고하세요.

여튼,  결론은

  • 변수는 꼭 “var“를 써서 명시적으로 선언하고,  “단일 var“패턴을 사용하라!
Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중