const num1 = 1;
const num2 = 2;
const result = num1 + num2; // 3
console.log(result); // 3
const num3 = 1;
const num4 = 2;
const result2 = num1 + num2; // 3
console.log(result2); // 3
// 반복되는 로직(수행)이 있다면 함수를 정의해서 사용하는게 효율적이다!
// Declaration function(함수 선언)
function add(a, b) {
return a + b;
}
// add라는 함수는 우리가 정의한 코드블록({}) 내의 기능을 포함하고 있다
// 기능의 이름을 add라고 하고 이 add는 function이라는 keyword를 통해서 함수로 정의 해준다
// 함수 이름은 짧고 간결하지만 의미 있게 사용하는게 좋다
// 함수의 인자도 의미 있는 naming을 해주는게 좋다
// a, b라는 매개 변수(인자)를 받아 온다
// 함수는 var와 마차가지로 hoisting의 대상이 된다!
// call by function(함수 호출)
const sum = add(3, 4); // 7
// 함수가 호출되면서 실질적인 값이 전달
// 함수가 호출 되면서 코드블록이 실행이 된다, return 7;
console.log(sum);
====================
=====deep dive======
====================
function add(num1, num2) {
return num1 + num2;
}
// 함수도 동일하게 함수를 정의할 때 함수의 코드블록이 메모리 어딘가에 저장이 된다
// add라는 함수의 이름은 OBJECT처럼 메모리에 할당된 코드블록을 가리킨다(Ref)
const doSomething = add;
// doSomething이라는 메모리가 할당되는데 내부에는 add 함수가 가리키는 Ref를 갖는다
const result = doSomething(2, 3);
console.log(result); // 5
====================
function print() {
console.log('print');
}
function print(name, age) {
console.log(`${name} ${age}`);
}
print(); // print
print(8, 33); // print, 인자를 받지 않는 함수에는 인자를 주더라도 변화가 없다
====================
function divide(num1, num2) {
return num1 / num2;
}
function suprise(callback) {
//const result = callback(); // NaN
const result = callback(2, 3);// add(2,3);, 5
console.log(result);
}
suprise(); // error, operator not a function, 아무런 인자를 넣어주지 않았기 때문에
suprise(add); // 5
suprise(divide); // 0.66666666666666