# 함수 특징 (1)
출처: https://medium.com/ibare-story/e252506f8525
1. 느슨한 인수 전달 메커니즘: 전달된 인수의 값 검증을 습관화하자
function(x, y) {
if( x == undefined || y == undefined) {
throw new Error("인수 x, y 필요");
}
}
2. 함수 호출시 arguments로 매우 유연하게 가변 인수를 처리한다.
// 전달된 인수의 합을 반환하는 함수
function add() {
var sum = 0;
for( var i = 0; i < arguments.length; i++ ){
sum += ( typeof arguments[i] == 'number' ) ?
arguments[i] : 0;
}
return sum;
}
add(); // 0
add( 10, 20, 30 ) // 60
3. 함수도 객체이며 객체와 같이 속성과 메소드를 가진다
// 아무것도 하지 않는 함수
function empty(x, y) { }
console.log(empty.length); // 2
=> empty 함수의 속성 length에 접근, 함수 인수 사양의 인수 갯수를 나타냄
=> apply, call, bind, name, prototype, toString 등 다양한 속성과 메소드가 있음
4. 언제든지 함수에 속성을 추가할 수 있다.
예제 1)
function foo() { }
foo.location = 'seoul';
console.log(foo.location); // seoul
예제 2)
// 단 한번만 할 일을 하는 게으른 함수 double
function double(x) {
if(!double.isCall) {
double.isCall = true;
} else {
return undefined;
}
return x * x;
}
double(10); // 100
double(20); // undefined
double(30); // undefined
// 다른 방법으로 나타내기
function double(x) {
double = function() {}; // 호출하는 순간 double 함수를 재정의한 후 반환
return x * x;
}
double(10); // 100
double(20); // undefined
double(30); // undefined
// 몇 번 호출됬는지 스스로 기억하는 함수
function double(x) {
if(!double.callCount) {
double.callCount = 1;
} else {
double.callCount++;
}
return x * x;
}
for( var i=1 ; i<=100 ; i++ ) {
double(i);
}
console.log(double.callCount); // 100
5. 함수 안에 함수를 사용할 수 있다.
// 함수 get을 포함하고 있는 foo 함수
function foo() {
function get() {
return 100;
}
return get();
}
foo(); // 100
6. new로 호출된 함수는 보통의 함수 호출과는 약간 다르다
- 호출된 이후 함수는 완료 됨
- 암묵적으로 만들어진 함수의 인스턴스 반환
- 클래스와 유사한 목적으로 설계된 함수는 구분을 위해 대문자로 시작
'javascript' 카테고리의 다른 글
함수의 특징 (3) (0) | 2017.09.12 |
---|---|
함수의 특징 (2) (0) | 2017.09.12 |
함수 특징 (0) | 2017.09.08 |
문제와 답 프로그램 (3) - forEach 사용 (0) | 2017.09.04 |
문제와 답 프로그램 (2) (0) | 2017.09.04 |