
함수란 하나의 로직을 재사용할 수 있도록 하는 것
function makeName(firstName,lastName){
return `${lastName} ${firstName}`;
}
const person1=makeName('hyunoo','kim');
console.log(person1);
const person2 =makeName('jisoo','park');
console.log(person2);
// 함수를 지정해주지 않으면 아름을 작성할때마다 반복작업을 해야한다.
const person3= `${yuri} ${lee}`
console.log(person3);
함수에서 입력은 parameter(매개변수)를 통해서 들어온다.
parameter)를 이용하면 임의의 데이터를 함수 안에 전달할 수 있다.인자(parameter) 라고 불리기도 한다.undefined이지만 기본값을 자체적으로 설정 가능하다. function sum(left=1,right=2){ /* left, right는 매개변수 */
console.log(left+right);
}
sum(2,3); /* 2,3은 인수 */
sum(3,8) // 11
sum(3); // 5
함수 내부에서 return 값으로 반환 값을 지정하고 함수가 종료된다.
return문이 없거나 return 값이 비어있으면(return;), 자동으로 undefined를 반환한다. function sum2(left,right){
return left+right;
}
const result=sum2(2,3);
console.log(result); // 5
return을 함수 중간에 하면 함수가 종료된다.
이를 이용해 조건에 맞지 않을때 함수를 일찍 종료 시킬 수 있다.
function result(num){
if(num<10){
return;
}
console.log(num);
}
result(8); //8
result(12); // undefined
함수 호출 시 전달된 인수들의 정보를 담고 있는 유사 배열 객체
function sum(){
let _sum =0;
for(let i=0;i<arguments.length;i++){
// 1 2 3 4 출력
console.log(i+' : '+arguments[i]+'</br>');
_sum+=arguments[i];
}
return _sum; // 10
}
console.log('result : ' +sum(1,2,3,4)); // 인자는 4개
function name() { }
지금까지 앞에서 본 함수는 함수 선언문으로 표현한 함수이다.
const name= function() { }
const sum = function(a, b) {
return a + b;
};
function 키워드( function() {} ) 대신 () => {} 사용
const fow = x => x*x; // function(x) { return x * x; };
console.log(fow(3)); //9
1회성 함수로 1번 실행하고 함수가 종료된다.
(function fow(){
console.log('hello');
})();
고차 함수에는 인자로 함수를 받는 함수, 함수를 반환하는 함수가 있다.
함수의 인자로 전달되고, 필요할때 나중에 호출되는 함수
function cal(func,num){
return func(num); // func은 콜백함수이다.
}
function increase(num){
return num+1;
}
function decrease(num){
return num-1;
}
// func에 increase 참조(주소)값이 전달된다.
console.log(cal(increase,10));
console.log(cal(decrease,10));
원시타입을 인자로 전달할때 값 자체가 인자에 저장된다.
함수내에서 원시타입의 값이 바뀌어도 인자로 전달된 원시타입 값은 변하지 않는다.
function display(num) {
num = 5;
console.log(num);
}
const value = 4;
display(value); // 5
console.log(value); // 4
객체타입을 인자로 전달할때 객체의 참조값이 인자에 저장된다.
함수내에서 객체의 값을 변경하면 인자로 전달된 객체의 값도 변경된다.
const age= 10;
const lee = {
name: 'Lee',
gender: 'male'
};
function changeName(num,obj){
num+=10;
obj.name= "Kim";
}
changeName(age,lee);
console.log(age); // 10
console.log(lee); //{name:"Kim",gender:"male"}
함수 내부에서 외부로부터 주어진 인자의 값(원시값, 참조값)을 변경하는 것은 좋지 않다.
상태 변경이 필요하다면, 새로운 객체를 만들어서 반환하는 것이 좋다.
function changeName(num,obj){
return {...obj, name:"Kim"};
}
changeName(age,lee);