기본 콘텐츠로 건너뛰기

4월, 2015의 게시물 표시

javascript 지역변수, 전역변수 그리고 호이스팅(hoisting)

javascript에서도 지역/전역 변수의 의미는 다른 언어들과 마찬가지다. 허나 언어적 특성이 있기때문에 주의해야 할 부분들이 있다. 1. 전역변수는 'var' 문자없이 선언 할 수 있다. 'var' 가 없이 선언된 변수는 전역변수이다. var name1 = "AAAA" ; console .log (name1); // AAAA name2 = "BBBB" ; console .log (name2); // BBBB 2. 지역변수는 함수안에서만 적용 된다, 다른 블럭({ }) 범위에서는 의미없다. var test = true ; if ( test ) { var name1 = 'AAAA' ; } console. log (name1); // "AAAA" function sayHello () { var name2 = 'BBBB' ; } console. log (name2); // name2 is not defined 3. 호이스팅(뜻: 끌어올리다)  Q : 뭘끌어 올릴까?  A : 변수선언식  Q : ....응?? var name = 'AAAA' ; function f1 () { console .log ( "before : " + name); //undefined var name = "BBBB" ; console .log ( "after : " + name); //BBBB } f1(); before에서 undefinde가 나왔다. 첫줄에서 전역변수로 선언했다손 치더라도 내부적으로 before가 호출되기전에 f1함수에서 아래 선언문이 먼저 끌어올려진다. var name; console.log("before : "+name);

static 변수, 함수

static 클래스파일이 메모리에 적재될때 생성되어 매번 여기저기 다른파일에서 new로 생성해서 사용하는게 아니라, {클래스명}.{static object} 식으로 바로 사용이 가능하다. 장점   최초에 한번만 생성하면되니, 메모리나 속도적인 비용면에서 강점이 있음. 단점   변수로 사용할 경우,   값이 변경되면 참조하는 모든곳에서 값이 동시에 같이 바뀌기 때문에   문제가 발생할 소지가 있음.  이럴떄 사용   변수 : 보통 final 까지 추가해서 상수로 많이 사용, 상수 네이밍은 대문자가 관례죠. static final int MAX_SIZE = 10 ;   함수 : 유틸성함수(?) Math.random() 뭐 이런 어떤 클래스에서 호출해도 상관없을것 같은 public static double random() { if (randomNumberGenerator == null ) initRNG(); return randomNumberGenerator . nextDouble(); }   ※ 실제 java random 함수 코드 ( http://goo.gl/T6FhOf )