함수를 정의 하는 방법에는 3가지 방법이 있다고 한다. 


1. function 명령으로 정의  ( 함수 선언식) 



function 함수명 ( 인수 1, 인수 2) { 

명령;

return 리턴값 

}




2. Function 생성자 경유로 정의 



 var 변수명 = new Function ( '인수1', '인수 2', 'return 함수 본체' );



3. 함수 리터럴 표현으로 정의  ( 함수 표현식) 


var kazikai=function 함수명 (인수1, 인수 2) {

명령;

return 리턴값

}


사실상 1번과 3번을 많이 사용 

1번과 3번의 차이는 

1번의 경우 는 함수를 직접 정의 하는것이며

3번은 익명 함수를 하나 만들어서 변수kazikai에 대입하는 방식을 사용 


2번의 경우는 인수1, 인수2 , 리턴 값들을 String  으로 표현 가능 

즉  var a= "인수 1, 인수2";

var b="return 함수 본체";

이런식으로 한다음 var kazikai=new Function ( a,b); 같이 선언이 가능 하다는 것 

하지만 

: 제 3자에 의해 임의의 스크립트가 자기 멋대로 실행 될수 있는 가능성

: 일반적인 코드를 실행하는 것보다 처리속도가 늦다. 


이 문제 때문에 가급적 사용을 피해야함.. ( eval() 함수도 동일 ) 



여기어 1번의 function  으로 정의 하는 방법과 3번의 리터럴 표현으로 정의 하는 방법이 있는데 


1번의 경우는 Browser의 JavaScript Interpreter 가  해당 function 들을 부모 함수의 스코프 영역에 등록 한다.   하지만 3번의 경우는 실행 할 경우 해당 함수가 선언 되기 때문에 호출 시점보다 선언 시점이 먼저 있다면 정의 되지 않은 함수가 된다. 
















by kazikai kazikai 2012. 6. 20. 14:39