function add(a, b) {
return a + b;
}
console.log(add(10, 5));
console.log(add(10, 5));
console.log(add(10, 5));
let c = 10;
function add2(a, b) {
return a + b + c;
}
console.log(add2(5,5)) // 20
c = 15
console.log(add2(5,5)) //25
항상 동일한 인자가 들어가도 c값에 따라서 결괏값이 달라질수 있다.
let c = 20;
function add3(a, b) {
c = b;
return a + b;
}
console.log('c: ', c);
console.log(add3(20, 30));
console.log('c: ', c);
부수적인 효과가 일어난다.
부수적인 효과 -> 함수에서 외부의 변수의 값을 변경하거나 들어온 인자의 값을 변화시키는 경우
let obj1 = { val: 10 };
function add4(obj, b) {
obj.val += b;
}
console.log(obj1.val); //10
add4(obj1, 20);
console.log(obj1.val); //30
return 값도 없고 마찬가지로 외부의 값을 함수 내부에서 변경하는 부수효과가 일어난다.
함수를 값으로 담을수 있다. 변수에 함수를 값으로 넣을수 있다. 그러므로 인자로 함수를 전달할수도 있다. 원하는 시점에서 함수를 평가(실행)할수 있다.
const f1 = function(a) {
return a * a;
};
console.log(f1); //ƒ (a) { return a * a; }
const f2 = function() {
return 5
}
const f1 = function(f) {
return f()
}
f1(f2)
function add_maker(a) {
return function(b) {
return a + b;
};
}
let add10 = add_maker(10);
//add10 의 값은 add_maker 리턴함수인 function(b) {return a+b}
//또한 클로저이다. add_maker 에서 인자로 10을 넘겨주고 종료되지만 리턴함수가 10을 기억하고 있다.
//그래서 결괏값이 30이 나오는것
console.log(add10(20)); //30
let add5 = add_maker(5);
let add15 = add_maker(15);
console.log(add5(10)); //15
console.log(add15(10)); //25
console.log(add10(20)); //30