🌈 함수(function)
🔥 함수 선언
🔥 매개변수(parameter)
🔥 반환 값 : return
🔥 함수 이름 짓기
🔥 익명 함수
🔥 함수 복사
🔥 콜백 함수(calledback function)
🔥 화살표 함수(arrow function)
1. 함수 선언
1) 함수 선언
- 함수 선언 방법 : 🔍 function 함수이름 (함수인자) { 함수 실행 코드 };
- 스코프(=선글라스) 범위 : {} 밖에서는 안이 보이지 않고, {}안에서만 밖을 볼 수 있음
- 즉, 함수 안에서는 함수 외부에 변수를 이용할 수 있으나, 함수 외부에서는 함수 안에 변수를 직접적으로 호출 불가
- 이에 {} 내의 값을 사용하고 싶을 땐, 함수호출을 통해 불러옴
- 함수의 핵심은 함수 선언과 함수 호출 방법 : 🔍 함수이름(함수인자);
- 함수의 전달 방법 : 🔍 함수명; 👈 ()를 제거한 "함수명"을 통해 함수 전달 가능
- 즉 함수명에 ()를 붙인다는 것은 함수를 전달하는 것이 아닌 함수를 호출하는 것임
function name(parameters) {
...함수 본문...
};
function sayHello() {
console.log( '안녕하세요!' );
};
sayHello()
2) 함수 선언문 vs 함수 표현식
- 함수 선언문은 함수가 정의되기도 전에 함수를 호출하여도 함수가 정상적으로 실행됨
- 함수 표현식은 실행 흐름이 함수에 도달했을 때(함수가 정의된 이후)부터 해당 함수를 사용 가능
- 함수 선언문과 함수 표현식의 차이는 "문법 형태"와 "함수 호출 위치"로 크게 구분 가능
function sum(a, b) {
return a + b;
}
let sum = function(a, b) {
return a + b;
};
sayHi("John");
function sayHi(name) {
alert( `Hello, ${name}` );
}
sayHi("John");
let sayHi = function(name) {
alert( `Hello, ${name}` );
};
sayHi("John");
2. 매개변수(parameter)
- 매개변수(parameter)를 전달하면 데이터(값)를 함수 안에 전달할 수 있음
function sayHello(name) {
console.log( name +'님 안녕하세요!' );
}
sayHello("Jaewon")
sayHello("Haezin")
function sayHello(from, text) {
console.log( from+' : ' + text );
}
sayHello("Jaewon", 'Hello!')
sayHello("Haezin", 'What are you doing?')
function showMessage(from, text = "no text given") {
console.log( from + " : " + text );
}
showMessage("Ann");
showMessage("Jaewon", "Where are you from?");
function changeName(obj) {
obj.name = "coder";
}
const jaewon = { name: "jaewon" };
changeName(jaewon);
console.log(jaewon);
function printFoodAll(...args) {
for (let i = 0; i < args.length; i++) {
console.log(args[i]);
}
}
printFoodAll("kimchi", "bulgogi", "hambuger", "chicken", "pizza");
printFoodAll("soup", "kimbab", "bread");
const calculator = {
plus : function(num1, num2){
return num1 + num2;
},
minus : function(num1,num2){
return num1 - num2;
},
multi : function(num1, num2){
return num1 * num2
},
divide : function(num1,num2){
return num1 / num2
}
}
const plus = calculator.plus(5,5);
const minus = calculator.minus(10,5);
const multi = calculator.multi(10,10);
const divide = calculator.divide(10,10);
console.log(plus);
console.log(minus);
console.log(multi);
console.log(divide);
3. 반환 값 : return
- return은 함수를 호출했을 때, 호출한 곳으로 함수의 결과 값을 전달해주기 위해 사용함
- console.log는 값을 출력만할 뿐 값을 전달하지 않기 때문에 undefined가 발생
- return은 함수 내 어디서든 사용할 수 있고, 함수 내에서 return을 만나면 호출한 곳에 값을 반환하고 즉시 함수를 종료시킴
- 함수를 호출한 장소에서 선언된 장소로 값을 전달하는 것이 파라미터라면, 함수가 선언된 장소에서 함수가 호출된 장소로 데이터를 전달하는 것이 return의 기능임
function sum(a, b) {
return a + b;
}
let result = sum(1, 2);
console.log( result );
4. 함수 이름 짓기
- 함수는 어떤 동작을 수행하기 위한 코드를 모아둔 것이기 때문에 함수의 이름은 보통 동사임
- 함수의 이름 또한 간결하고 명확해야하고, 함수가 어떤 동작을하는지 설명할 수 있어야 함
- 어떤 동작을하는지를 설명 가능한 동사를 접두어로 붙여 함수명를 짓는게 관습임
🔍 "show..." : 무언가 보여주는 기능을하는 함수
🔍 "get..." : 무언가 값을 반환함
🔍 "calc..." : 무언가 계산함
🔍 "create..." : 무언가 생성함
🔍 "check..." : 무언가 확인하고 불린값을 반환함
🔍 "handle..." : 무언가를 제어함
- 또한, 함수명은 속한 조직 구성원들과 합의된 접두어를 주로 사용하는 것을 권장함
- 함수 생성할 때는 한가지 기능한 수행할 수 있게 만드는 것을 지양하고, 여러 기능이 필요할 땐 함수의 기능을 쪼개서 여러 함수를 선언하는 것이 좋음
function showPrimes(n) {
nextPrime: for (let i = 2; i < n; i++) {
for (let j = 2; j < i; j++) {
if (i % j == 0) continue nextPrime;
}
console.log( i );
}
}
showPrimes(10)
function showPrimes(n) {
for (let i = 2; i < n; i++) {
if (!isPrime(i)) continue;
console.log(i);
}
}
function isPrime(n) {
for (let i = 2; i < n; i++) {
if ( n % i == 0) return false;
}
return true;
}
showPrimes(10)
5. 익명 함수
- 함수 명이 없이 함수를 담음 변수에 ()를 붙여 바로 호출 가능
const print = function () {
console.log("print");
};
print();
const printAgain = print;
printAgain();
6. 함수 복사
- 함수를 복사할 때 복사될 함수는 ()를 붙이지 않음
- ()를 있는 채로 새로운 변수에 함수를 담으면, 함수 자체가 아니라 호출 결과(반환값)이 저장됨
function sayHi() {
console.log( "Hello" );
}
let func = sayHi;
func();
sayHi();
function sayBye(){
console.log("Bye");
}
let sayBye2 = sayBye();
sayBye();
sayBye2();
7. 콜백 함수(calledback function)
- 함수를 함수의 파라미터로 전달하고, 상황에 따라 인자로 전달된 함수를 "나중에 호출(called back)"하는 것
- 함수는 "동작"을 나타내는 값임(문자열이나 숫자 등 원시값들은 데이터를 나타냄)
- 동작을 대변하는 값인 함수를 파라미터로 전달하고, 동작이 필요할 때 이 값을 실행할 수 있음
function randomQuiz(answer, printYes, printNo) {
if (answer === "love you") {
printYes();
} else {
printNo();
}
}
const printYes = function () {
console.log("Yes!");
};
const printNo = function () {
console.log("No!");
};
randomQuiz("wrong", printYes, printNo);
randomQuiz("love you", printYes, printNo);
8. 화살표 함수(arrow function)
- 화살표 함수('=>')는 ES6에 추가된 문법으로 함수 표현식을 간결하게 만들어 줌
- arrow 함수는 항상 익명 함수임
- 화살표 함수 만드는 법 : 🔍 let 변수 = (함수 파라미터) => 함수 기능 코드;
- 함수에 전달한 파마리터가 1개 뿐이면 ()로 생략 가능
- 함수의 body가 1줄이라면, 스코프({}) 뿐아니라 return도 생략 가능
- 함수의 body가 2줄 이상이라면, {}를 명시해주고, 값을 전달하기 위해 return 입력
const arrowPrint = () => console.log("simplePrint!");
const add = function (a, b) {
return a + b;
};
const add = (a, b) => a + b;
let sum = (a, b) => {
let result = a + b;
return result;
};
alert( sum(1, 2) );