
1) function declaration
function hello(name){
return `${name}님 안녕하세요.`
}
2) function expression(함수 표현식)
var hello = function(name){
return `${name}님 안녕하세요`
}
3) function hoisting(함수 호이스팅)
console.log(hello('홍길동'));
console.log(hi('홍길동')); // TypeError : hi is not a function(hi는 아직 정의되지 않았다는 뜻)
// 함수 선언문
function hello(name){
return `${name}님 안녕하세요`;
}
//함수 표현식
var hi = function(name){
return `${name} 안녕!`;
}
1) parameter and argument(매개변수와 인수)
function hello(name){
console.log(arguments);
return `${name}님 안녕하세요.`;
}
result = hello();
console.log(result);result = hello('유관순', '김미미');
console.log(result);
function hi(name = '아무개'){
return `${name}님 안녕`;
}
2) return
1) arrow function
// function 키워드 생략
message = () => {
return 'Arrow Function';
}
message = () => 'Arrow Functions are simple';
message = (val1, val2) => 'Arrow ' + val1 + val2;
message = val1 => 'Arrow ' + val1;
1) immediately invoked function expression(즉시 실행 함수)
(function hello(name){
console.log('기명 즉시 실행 함수! 함수 정의와 동시에 호출');
console.log(`${name}님 안녕하세요.`);
})('홍길동');
2) recursive function(재귀함수)
// n! 구하기
function factorial(n){
// n이 1 이하일 때 멈춤
if(n <= 1) return 1;
//재귀호출
return n * factorial(n-1);
}
3) nested function(중첩 함수)
function outer(){
var outerVal = '외부함수';
function inner(){
var innerVal = '내부함수';
console.log(outerVal + ", " + innerVal); // 외부 함수의 변수를 내부 함수에서 참조할 수 있다.
}
inner();
}
outer();
4) callback function(콜백 함수)
// 전달 받는 값을 증가시켜주는 함수
function increase(value){
return value + 1;
}
// 전달 받는 값을 감소시켜주는 함수
function decrease(value){
return value - 1;
}
// 전달 받은 함수에 전달 받은 값을 적용 시켜주는 고차 함수
function apply(func, value){
// 고차 함수는 매개변수를 통해 전달 받은 콜백 함수의 호출 시점을 결정해서 호출한다.
// 콜백 함수는 고차 함수에 의해 호출 되며 이 떄 고차 함수는 필요에 따라 콜백 함수에 인수를 전달할 수 있다.
return func(value);
}
// 고차 함수로 콜백 함수를 전달하며 호출한다.
console.log(apply(increase, 5));
console.log(apply(decrease, 5));
// 콜백 함수가 고차 함수 내부에서만 호출 된다면 콜백 함수를 익명 함수 리터럴로 정의하면서
// 바로 고차 함수에 전달하는 것이 일반적.
console.log(apply(function(value){return value + 1}, 10));
console.log(apply(value => value -1, 10));
5) purea and impure functions(순수함수와 비순수함수)
순수 함수
var cnt = 0;
function increase(n){
return n++;
}
// 순수 함수가 반환한 결과 값을 변수에 재할당 해서 상태를 변경
cnt = increase(cnt);
console.log(cnt);
비순수 함수
var cnt = 0 ;
// 순수 함수가 반환한 결과 값을 변수에 재할당 해서 상태를 변경
cnt = increase(cnt);
console.log(cnt);
function decrease(){
return --cnt;
}
1) 정의
var hello = function(){
return '안녕!';
};
var obj = { hello : hello };
function repeat(func, count){
for(var i = 0 ; i < count ; i++){
console.log(func());
}
// 4. 함수의 반환 값으로 사용할 수 있다.
return function(){
console.log(`${count}번 반복 완료.`)
}
}
var returnFunc = repeat(obj.hello, 5);
returnFunc();