자바스크립트에서 함수는 일급 객체이며, 여러가지 방식으로 유연하게 다룰 수 있다.
일반 객체와 달리 함수는 특별한 능력이 있는데 . . .❔
const sayHello = function(){
console.log('Hello');
}
//sayHello 를 가지고 함수를 어디서나 호출할 수 있다.
//함수를 객체/변수처럼 매개변수로 보낼 수 있다.
// (2)-1. 콜백함수 : 매개변수로 쓰이는 함수
// (2)-2. 고차함수 : 함수를 인자로 받거나 return하는 함수
function callFunction(func){
// 콜백함수이자 고차함수
func();
}
const sayHi = function (){
console.log('hi!');
}
callFunction(sayHi); // hi! 출력
function createAdder (num) {
return function (x) {
return x + num;
};
}
const addFive = createAdder(5);
console.log(addFive(10)); // 15 출력
const person = {
name: "Sam",
age: 31,
isMarried: true,
sayHihi: function () {
console.log(`Hihi, My name is ${this.name}.`)
},
sayBye: () => {
console.log(`Bye, ${this.name}.`); // 💥
}
}
person.sayHihi(); // Hihi, My name is Sam.
person.sayBye(); // Bye, undefined. 💥 화살표 함수는 'this'를 바인딩 하지 않는다!!
const myArr = [
function (a,b) {
return a+b
}, function (a,b) {
return a-b
}
];
console.log(myArr[0](1,3)); // 4
console.log(myArr[1](20,5)); // 15
function multiplyBy(num) {
return function (x) {
return x * num;
}
};
function add(x, y) {
return x + y;
}
const multiplyByTwo = multiplyBy(2);
// function (x) { return x * 2 } ;
const multiplyByThree = multiplyBy(3);
// function (x) { return x * 3 } ;
console.log(multiplyByTwo(10)); // 20
console.log(multiplyByThree(10)); // 30
const result = add(multiplyByTwo(5), multiplyByThree(10)); // add(10,30)
console.log(`FINAL => ${result}`); // FINAL => 40

좀만 더 하면 알 것 같은데 ........................
뇌가 간지러운 이 기분 😶