# 함수 특징 (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

+ Recent posts