[JavaScript] 값으로서의 함수
값으로서의 함수와 콜백
JavaScript에서는 함수도 객체다.
다시 말해서 일종의 값이다.
거의 모든 언어가 함수를 가지고 있다. JavaScript의 함수가 다른 언어의 함수와 다른 점은 함수가 값이 될 수 있다는 점이다.
함수역시 변수에 담을수 있다.(var a = function(){})
function a(){} // var a = function( ){ }(함수가 값이므로 가능하다.)
위의 예제에서 함수 a는 변수 a에 담겨진 값이다. 또한 함수는 객체의 값으로 포함될 수 있다. 이렇게 객체의 속성 값으로 담겨진 함수를 메소드(method)라고 부른다.
a = {
b:function(){
}
};//객체는 {에서 }로 끝난다.
함수는 값이고 그렇기 때문에 객체안에 저장될 수 있다 .
객체 안에서 b라는 것은 어떤 값을 저장하고 있는 그릇역할(key-value) b는 그릇안에서 변수와 같은 역할을 하고 있다 (값을 저장하고 있기 때문에)
a라는 변수는 b라는 값이 있는데 그 속성의 값이 함수인데 이 함수를 메소드라고 한다.(객체 안에 저장되어 있는 함수를 메소드라고 부른다.)
cf.) 객체 안에서 변수 역할 하는 것을 프로퍼티(속성)라 한다. 그리고 그 속성에 저장되어 있는 값이 함수라면 메소드라 부른다.
객체 >변수(프로퍼티) > 함수(메소드)
함수는 값이기 때문에 다른 함수의 인자로 전달 될수도 있다. 아래 예제를 보자.
function cal(func, num){
return func(num)
}
function increase(num){
return num+1
}
function decrease(num){
return num-1
}
alert(cal(increase, 1));
alert(cal(decrease, 1));
10행을 실행하면 함수 increase와 값 1이 함수 cal의 인자로 전달된다. 함수 cal은 첫번째 인자로 전달된 increase를 실행하는데 이 때 두번째 인자의 값이 1을 인자로 전달한다.
함수 increase은 계산된 결과를 리턴하고 cal은 다시 그 값을 리턴한다.
함수는 함수의 리턴 값으로도 사용할 수 있다.
function cal(mode){
var funcs = {
'plus' : function(left, right){return left + right},
'minus' : function(left, right){return left - right}
}
return funcs[mode];//cal('plus')(2,1));로 호출하명 mode는 plus가 된다.
}
alert(cal('plus')(2,1));
alert(cal('minus')(2,1));
당연히 배열의 값으로도 사용할 수 있다.
var process = [
function(input){ return input + 10;},
function(input){ return input * input;},
function(input){ return input / 2;}
];
var input = 1;
for(var i = 0; i < process.length; i++){
input = process[i](input);
}
alert(input);
출처: https://devbox.tistory.com/entry/JavaScript-값으로서의-함수?category=574556 [장인개발자를 꿈꾸는 :: 기록하는 공간]
'Javascript > JavaScript' 카테고리의 다른 글
[JavaScript] this (0) | 2020.07.07 |
---|---|
[JavaScript] 생성자와 new (0) | 2020.07.07 |
[JavaScript] 함수의 호출 (0) | 2020.07.07 |
[JavaScript] 콜백 (0) | 2020.07.07 |
[JavaScript] 객체 (0) | 2020.07.07 |
[JavaScript] 배열 (0) | 2020.07.07 |
[JavaScript] 함수 정의하는 방법 (0) | 2020.07.07 |
[JavaScript] 비교 ('=='와 '==='의 차이) (0) | 2020.07.07 |