타쿠꺼
자바스크립트 패턴 본문
기초
1. 전역변수의 최소화
- 전역변수는 다른 외부코드들과 혼용사용되면 오류를 야기시킬 수 있기 때문에 사용을 최소화 하여야 한다.
- var로 변수를 선언하지 않으면 암묵적으로 전역변수로 정의된다. 따라서 항상 var를 선언하도록 하자.
- 전역변수를 var로 선언하면 delete되지 않는다.
- 암묵적 전역변수는 사실상 전역객체(브라우저의 경우 window)의 프로퍼티이므로 delete로 삭제 가능하다.
- var 선언을 연쇄적으로 사용할 때 암묵적 전역객체가 생성될 수 있다.
ex )
function func() {
var a = b = 0;
}
- 이 경우, a는 지역변수지만 b는 암묵적 전역변수다. 이는 평가(evaluation)가 오른쪽에서 왼쪽으로 진행되기 때문이다.
- 즉 b = 0이 실행되고 이것이 var a = b 가 되는 것이다.
- 전역객체 얻기
ex )
var global = (function () {
return this;
}());
- 메서드나 생성자, new를 사용하여 호출하지 않으면 this는 전역객체를 가리키기 때문.
- 함수 상단에 var로 변수를 미리 선언하고 사용하는 것이 좋다.
ex )
var myname = 'global'; // 전역변수
function func () {
console.log(myname); // undefined
var myname = 'local';
console.log(myname); // 'local'
}
이는 실행 컨텍스트가 생성될 때 변수와 객체들이 먼저 생성되고 값은 런타임 단계에서 대입되기 때문에 myname이 지역변수로써 존재해서 전역변수값이 출력되지 않는것이다. 그런데 지역변수로써 존재하더라도 값의 대입이 뒤에 있으므로 값이 undefined으로 나오는 것이다.
2. for 루프
- for 루프의 변수를 한번에 초기화하는 것이 좋다.
- 특히 array가 배열이 아닌 HTMLCollection이라면, 접근할 때마다 속도가 느려지므로 미리 캐시를 해두는것이 좋다.
ex )
for (var i = 0, max = array.length; i < array.length ; i++) { }
3. parseInt() 사용
- parseInt는 문자열을 숫자로 변환시켜주는데, 두번째 매개변수로 기수를 받는다. 보통 이를 생략하는 경우가 있는데, 그러면 0으로 시작되는 문자열을 받을 때 이를 8진수로 해석하는 경우가 생길 수 있으므로 대개의 경우 10을 넘겨줘서 10진수로 다뤄야 한다.
ex )
var month = '08';
month = parseInt(month, 10);
- 단순한 숫자문자열을 변환 시킬 때에는 다음과 같은 방법이 더 빠르다.
ex )
console.log(typeof(+'08')); // number
console.log(typeof(Number('08'))); // number
4. 명명패턴
- 명명패턴은 일종의 암묵적인 약속이다.
- 생성자 함수는 첫글자를 대문자로 사용한다.
- 함수명은 camelCase로, 변수는 variable_name 으로 사용한다.
- private 멤버로 구현된 변수는 앞에 _를 붙여 사용한다.
리터럴과 생성자
1. new Object()로 객체를 생성하지 마라.
- 매개변수로 넘긴 값에 따라 Object, Number, String 등으로 바뀜.
- 리터럴 표기법에 비해 속도가 느림.