function 함수이름([파라미터, ...]){
실행 코드;
[return 리턴값;]
}
// 함수 선언
function add(x, y){
return x+y;
}
// 함수 호출
let result = add(1,2);
console.log('result = ' + result); // 숫자 + 숫자
// 자바 스크립트의 함수는 파라미터의 타입을 검사하지 않음.
result = add('안녕','HI');
console.log(result); // 문자열 + 문자열
// 자바 스크립트 함수는 파라미터 개수를 검사하지 않음.
result = add(10,20,30); // 함수 선언의 parameter 개수보다 많은 argument 전달
console.log(result); // 앞의 두개 (숫자 + 숫자);
result = add(1); // 함수 선언의 parameter 개수보다 적은 argument 전달
// 전달하지 않은 파라미터의 값은 undefined가 됨.
console.log(result); // -> NaN (Not a Number)
// 자바스크립트의 모든 함수는 arguments 이름의 프로퍼티를 가지고 있음.
// 함수 호출에서 전달한 모든 값들을 저장하는 (배열과 비슷한) 객체
function test(){
console.log(arguments);
for(let x of arguments){
console.log(x);
}
}
test(1);
test(1, 'haloooo');
const plus = add; //(2) 함수는 변수에 저장할 수 있음.
result = plus(100,200);
console.log(result);
// 익명 함수: 이름이 없는 함수
const minus = function(x,y){
return x - y;
};
console.log('minus =', minus(1,2));
// 익명 함수를 선언과 동시에 호출:
result = (function (x,y){
return x/y;
}) (1,2);
console.log(result);
// 함수를 argument로 갖는 함수:
function calculate(x,y,operator){
return operator(x, y);
}
result= calculate(1,2,add);
console.log(result);
result = calculate(1,2,function (x,y){
return x - y;
});
console.log(result);
function increase(n){
//return function () {};
// 함수 안에서 함수를 정의 - 내부 함수 java에 없는 특징적 기능
function addN(x) {
return x + n;
}
// 함수를 리턴
return addN;
}
const increaseTen = increase(10);
console.log(increaseTen(7)); // 결과는 '17'
const increaseOne = increase(1);
console.log(increaseOne(12)); // 결과는 '13'
(파라미터, ...) => {실행코드; ... }
(파라미터, ...) => 리턴값
const fnAdd = (x,y) => { return x + y; };
console.log(fnAdd(3,4)); // 결과는 '7'
const fnSubtract = (x,y) => x-y;
console.log(fnSubtract(3,4));