함수란 어떤 특정 작업을 수행하기 위해 필요한 일련의 구문을 그룹화 한 개념.
다른 부분에서도 동일한 작업을 반복적으로 수행해야 한다면 미리 작성된 함수를 재 사용 할 수 있음.
일반적인 기능은 특정 작업을 하는 구문들의 집합을 정의, 필요시 호출, 필요한 결과 값 또는 수행 결과를 얻는 것이나,
객체 생성, 행위 지정, 정보의 구성 및 은닉, 클로저, 모듈화 등의 기능도 수행할 수 있음.
함수도 객체이며, 다른 객체와 구분될 수 있는 특징은 호출할 수 있음, 다른 값들처럼 사용 가능함으로,
변수나 객체, 배열 등에 저장 가능하며, 다른 함수에 전달되는 인수로도 사용, 또한 다른 함수의 반환 값으로 사용 가능하여 일급 객체라고 표현함.
함수 정의
함수 선언식 (Function declaration)
함수명 : 함수 선언 식의 경우 함수명에 생략이 불가능, 함수명은 함수를 호출히거나, 함수에서 자기 자신을 호출하는 식별자의 역활.
매개변수 : 소괄호() 로 감싼 목록으로 1개 이상의 경우 콤마(,)로 분리, 다른 언어와의 차이는 매개변수의 자료형을 기술하지 않음.
함수 몸체 : 실제 함수가 호출 될 경우 실행되는 구문들의 내용으로 중괄호{} 로 구문을 감싸고 return 문으로 결과 값을 반환할 수 있음.
function names(param) {
return;
}
함수 표현식 (Function expression)
var func1 = function (param) {
return;
};
함수 표현식으로 정의한 함수는 함수명을 생략할 수 있음. 이러한 함수를 익명 함수 (anonymous function)이라 함.
// 익명 함수
var func1 = function (param) {
return param;
};
// 기명 함수
var func2 = function sum(a, b){
return a + b;
};
Function() 생성자 함수
var sumNum = new Function('a', 'b','return a+b');
console.log(sumNum(1,2));
함수 호이스팅 (Function Hoisting)
var sumResult = sum(1,2); // TypeError: sum is not a function
var sum = function(num1, num2) {
return num1 + num2;
};
일급 객체 (First-class Object)
// 변수나 Object에 함수를 할당 할 수 있음.
var increase = function(num){
return num + 1;
};
var decrease = function(num){
return num - 1;
};
var obj = {
increase : increase,
decrease : decrease
};
// 함수를 파라미터나, 반환 값으로 설정 가능 함.
function calc(func, num){
return func(num);
};
console.log(calc(increase,1));
console.log(calc(decrease,1));
매게 변수 (Parameter, 인자)
var sum = function(num1, num2){
console.log(num1, num2, num1+num2); //1, undefined, NaN
};
반환 값 (return value)
function sum(a, b){
return a+b;
}
console.log(sum(4,5)); // 9를 반환
function sum(a, b) {
return [a+b, a, b]; //[9,4,5] 배열 반환
}
console.log(sum(4,5));
함수 객체의 프로퍼티
arguments 프로퍼티
function sum(a, b){
console.log(arguments) //Arguments(3) [1, 2, 3, ....
};
sum(1,2,3);
caller 프로퍼티
function sum(a, b){
minus();
return a+b; // 5
};
function minus(a, b){
console.log(minus.caller, 'caller'); // ƒ sum(a, b){ minus(a,b); return a+b; "caller"
}
sum(3,2);
__proto__ 프로퍼티
prototype 프로퍼티
- [[prototype]] 프로퍼티
- 모든 객체가 가고 있는 프로퍼티
- 객체의 입장에서 자신의 부모 역활을 하는 프로토타입 객체를 가르키며, 함수 객체의 경우 Function.prototype
- prototype 프로퍼티
- 함수 객체만 갖고 있는 프로퍼티.
- 함수 객체가 생성자로 사용될 때 이 함수를 통해 생성된 객체의 부모 역활을 하는 객체를 가르킴.
- 함수가 생성될 때 만들어지며, constructor 프로퍼티를 가지는 객체를 가르킴.
함수의 형태
즉시 호출 함수 표현식 (IIFE)
// 기명 즉시실행함수
(function abc() {
console.log('abc')
}());
// 익명 즉시실행함수
(function () {
console.log('abc');
}());
내부 함수 (Inner Function)
function sum(a, b){
const c = a + b;
function print(){ // Inner Function
console.log(`print ${c}`)
}
print();
}
sum(1,2);
콜백 함수 (Callback Function)
setTimeout(function(){
console.log('10초 후 출력');
}, 10000);
'4. Programming > 4.3 JavaScript' 카테고리의 다른 글
9. 프로토타입과 객체지향 (0) | 2018.08.09 |
---|---|
8. 타입 체크 (0) | 2018.07.24 |
6. Immutability (객체와 변경불가성) (0) | 2018.07.13 |
5. Object (객체) (0) | 2018.06.17 |
4. 제어문 (Control flow statement) (0) | 2018.05.28 |