Dev-dotoli TIL

JS 19 function2



값으로서의 함수

demo22.html


JS에서는 함수도 객체임, 일종의 값

거의 모든 언어는 함수를 가지고있는데
JS의 함수는 다른언어와 달리 ‘값’이 될 수 있음

function a() {}
// var a = function(){}
// a로 정의된 함수. 값
a = {
  b: function () {},
};

// a 는  객체{} 안에 b라는 key가 있고
// key의 값(value)은 function(){}

// key가 변수의 역할을 하고
// 객체 안에서 변수의 역할을 하는것 = 속성 property

// 객체의 속성 값으로 담겨진함수 = method

// 변수 a의 객체안에 b라는 속성이 담겨있는데
// 그 속성의 값은 함수이며
// 이를 method라고 부름


함수는 값 이잖음?

다른 함수의 인자로 전달 될 수 있음

function cal(func, num) {
  return func(num);
}
// cal 1인자 func, 2인자 num을 받음
// ()호출
// func를 호출하면서 2인자를 func의 1인자로 전달

function increase(num) {
  return num + 1;
}
//함수 increase는 인자로 전달된 값에 +1을 리턴

function decrease(num) {
  return num - 1;
}
// decrease는 인자로 전달된 값의 -1 리턴

alert(cal(increase, 1));
// : 2

alert(cal(decrease, 1));


함수는 함수의 리턴 값으로도 사용할 수 있음

function cal(mode) {
  var funcs = {
    plus: function (left, right) {
      return left + right;
    },
    minus: function (left, right) {
      return left - right;
    },
  };
  return funcs[mode];
}

alert(cal("plus")(2, 1));
// : 3

alert(cal("minus")(2, 1));
// : 1

// function key?(value?) {contents}


배열값으로도 사용할 수 있음

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);
}
// i값이 0부터 -
// process길이보다 작은동안 i값을 1씩 증가시키면서 호출

// i값 0 1 2 가 만들어짐 (?)
// process길이보다 작다는게 무슨말
// J : process라는 배열의 길이 (배열의 크기/개수)

// i = 0일때 input=1 1번배열 리턴으로 11
// i = 1일때 input=11 2번 리턴으로 121
// i = 2일때 input=121 3번 리턴으로 60.5

alert(input);
// : 60.5

이렇게 함수는

변수, 매개변수, 리턴값

의 용도로 사용될 수 있고 이 데이터는

first - class citizen, object, value 라고 부름