Front/JavaScript
[JavaScript] JS 함수
ddo04
2024. 7. 5. 16:30
✏️ 함수
- 하나의 동작으로 어떤 목적을 달성하거나 원하는 결과를 도출하기 위한 코드 집합 의미
- 한 번만 사용하고 마는 것이 아닌 반복적인 동작을 처리하기 위해 작성되고 같은 이름으로 계속하여 재사용할 수 있음
✏️ 함수 작성
- 함수를 작성할 때는 펑션이라는 키워드 사용
- 뒤에 함수의 사용할 이름을 작성을 함
- 뒤에 괄호를 넣는데, 괄호는 함수에서 사용하려는 인자를 담는 공간을 의미
- 인자들을 반드시 정의해야 하는 것은 아님
- 인자가 필요하지 않은 함수라면 그냥 없이 사용해도 됨
- 중괄호 부분에는 어떤 처리를 할지를 작성하면 됨
- 함수를 정의할 때 작성했던 함수 이름을 작성하고 뒤에 괄호를 열어서 필요한 인자를 넣어주면됨
- 한 번 만든 함수는 언제든지 재사용할 수 있고 어느 위치든 내가 필요한 위치에서 부를 수 있다는 장점이 있음
function bok(main){
console.log(`${main} 볶음밥`);
}
bok('새우');
bok('제육');
- sum 함수는 인자를 두 개 받는 함수
- 두 개의 값을 받아서 합계 출력
- 두 개의 인자 필요
function sum(a,b){
console.log(a + b);
}
sum(10, 20);
✏️ 인자, 매개변수
- 인자를 더 정확하게 구분하기 위한 용어
- 인자 = 함수를 호출할 때 전달하는 값 = 함수의 입력값 = Arguments
- 매개변수 = 함수를 정의할 때 작성하는 필요 인자 = 함수의 입력 변수 = Parmeter
✏️ 지역변수, 전역변수
function a(){
const b = 10;
console.log(b);
}
a();
console.log(b);
- 함수 내부에서 선언된 변수를 지역 변수
- 변수가 존재하는 변수를 사용할 수 있는 유효범위가 함수로 제한
- 변수를 사용할 수 있는 범위(Scope)가 중괄호로 감싸진 블록 안으로 제한 <함수뿐만 아니라 조건문, 반복문에서도 마찬가지>
- 함수 내부에서 선언된 변수는 함수 내부에서만 사용 가능
const b = 10;
function a(){
console.log(b);
}
a();
console.log(b);
- 전역 변수는 함수 내부에서 접근하는 것이 가능해서 함수 내부의 비가 존재하지 않지만 외부에 존재하는 전역변수 출력 가능
- 함수에서 재선언되면 함수 내부에 선언된 지역변수만 접근할 수 있음
const b = 10;
function a(){
const b = 20;
console.log(b);
}
a();
console.log(b);
✏️ 함수와 인자 / 호출된 인자의 개수가 부족
- 함수를 작성할 때는 사용할 인자를 명시하고 함수를 호출할 때 명시된 인자의 개수에 맞춰서 인자를 전달하는 방식으로 사용
- 함수를 호출할 때 실수로 더 많은 인자를 전달하거나 개수가 부족하게 인자를 전달하면
- sum 함수는 인자가 두 개 필요
- 문서상에서 어떤 에러도 발생하지 않음
- 자바스크립트에서는 값이 할당되지 않은 친구들한테는 기본적으로 undefined가 할당
- 우리가 두 개의 인자를 필요로 하는 함수 sum을 작성하였을 때 해당 인자들에는 undefined 값을 가지고 있음
- 하나의 값만 전달하는 경우에는 a에는 우리가 전달한 인자가 들어가고 b는 전달 받는 것이 없기에 그냥 기본값 그대로 undefined 들어감
function sum(a, b){
console.log(a + b);
}
sum(10, undefined);
- NaN은 Not a Number로 숫자가 아니라는 의미
✏️ 매개변수 기본 값
- 필요한 인자의 개수보다 적은 인자가 전달되는 경우에도 nudefined로 지정되지 않게 하기 위해 매개변수들의 기본값 Default Parameter을 지정하면 됨
- 디폴트 파라미터를 사용하려면 ()안에 있는 인자에 등호를 붙이고 원하는 값을 지정
- 지정을 해놓으면 인자를 2개 제대로 전달 받으면 전달받은 값이 들어가게 됨
- 인자 b에 들어갈 값을 전달받지 못한 경우에는 b가 기본값으로 지정된 0으로 할당되게 됨
function sum(a, b = 0){
console.log(a + b);
}
sum(10);
sum(10, 20);
✏️ arguments 객체
- 필요한 인자의 개수보다 더 많은 인자를 전달하면 생기는 상황
- 많은 인자를 작성하여도 오류가 나지 않는 이유는 Arguments 임
- Arguments가 우리가 전달한 인자들이 몇 개가 되었든지 전부 받아서 배열처럼 저장되고 배열처럼 접근할 수 있도록 만들어 줌
- Arguments는 인자가 몇개가 되었든 주는 건 다 거절하지 않고 받는 친구
- 우리가 인자를 초과해서 보내도 초과된 인수는 무시당할 뿐이지 오류를 발생하지는 않는다
function sum(a,b){
console.log(arguments[0])
console.log(arguments[1])
console.log(arguments[2])
}
sum(10, 20,30);
✏️ 나머지 매개변수
- 지정한 인자를 제외한 나머지 모든 인자를 배열로 묶어서 나타낼 수 있는 구문
- 3개 이상의 인자를 전달받아서 나머지를 한 번에 받아서 사용하고 싶다면 Rest Parameter 구문 사용
- 3번째 연산자로 정계연산자처럼 ... 점을 3개 붙이고 변수 이름을 정하면 순서대로 값이 들어가고 나머지는 몇 개가 되었든 그 이후에 남는 나머지 인자들을 전부 변수 이름으로 사용할 수 있개 됨
function print(a,b,...rest){
console.log(a);
console.log(b);
console.log(rest);
}
print(10,20,30,40,50,60,70);
✏️ 함수의 반환 값
- 함수는 특정 동작을 수행할 뿐 아니라 return이라는 명령문을 사용하여 특정 값을 변경할 수 있음
- return이라는 명령문을 사용하면 현재 함수를 종료하고 지정한 값을 함수를 호출한 지점으로 반환
function sum(a, b){
return a + b;
}
console.log(sum(10,20));
- 함수가 리턴 명령을 만나면 실행 중인 함수를 종료하고 뒤에 값을 함수를 호출한 위치로 반환하기 때문에 결과값이 함수를 호출한 console 지점으로 반환
✏️ 함수의 표현식
- 자바스크립트에서는 함수를 하나의 값으로 취급
- 함수를 변수의 값을 대입하듯이 표현식으로 정의할 수 있음
function sum(a, b){
console.log(a + b);
}
const sum = function (a, b){
console.log(a + b);
}
sum(10,20);
✏️ 화살표 함수
- 명령어가 한 줄일 때 중괄호를 생략하면 리턴이라는 명령문을 생략할 수 있음
- 중괄호가 없고 바로 실행 코드가 있으면 리턴이 보이지 않더라도 자동으로 들어감
- 중괄호가 열려 있다면 값이 자동으로 리턴되지 않기 때문에 값을 꼭 반환해야 하는 함수의 경우에는 별도로 리턴을 써주어야 함
const sum = (a, b) => a + b;
const sum = (a, b) =>{
a + b;
}
console.log(sum(10, 20));
✏️ 화살표 함수에서 괄호를 생략할 수 있는 경우
- 필요한 인자가 하나인 경우에는 인자를 감싸고 있는 괄호를 생략할 수도 있음
- 괄호를 생략하는 것은 필수적인 것은 아님
- 인자의 개수와 상관없이 괄호를 계속 붙여도 상관없음
- 괄호를 생략하기 위해서는 인자의 개수가 하나일 때만 가능
- 인자의 개수가 2개 이상이거나 인자를 하나도 사용하지 않는 경우에는 괄호 생략 불가
✏️ 일반 함수를 화살표 함수로 변경
function hello() {
console.log('Hello!');
console.log('World!');
}
function sum(a, b) {
return a + b;
}
function greeting(user) {
console.log(`Hello, ${user}!`)
}
- hello 함수는 인자는 하나도 사용하지 않고 있고 실행 코드는 두 줄로 이루어져 있음
// function hello() {
// console.log('Hello!');
// console.log('World!');
// }
const hello = () => {
console.log('Hello!');
console.log('World!');
};
hello();
// function sum(a, b) {
// return a + b;
// }
const sum = (a, b) => {
return a + b;
}
console.log(sum(10, 20));
// function greeting(user) {
// console.log(`Hello, ${user}!`);
// }
const greenting = (user) =>{
console.log(`Hello, ${user}!`);
};
greenting('겨울');