[ES6] 함수

JH Cho·2022년 9월 17일
0

es6

목록 보기
4/11

함수

JS 함수 특징

다른 언어들은 만약 파라미터 개수만큼 인자를 안 넣어주면 에러가 발생하지만 JS는 에러 안뜸.

function 더하기(a, b){
  console.log(a)
}

더하기(1) //1
------------
function 더하기(a, b){
  console.log(a + b)
}

더하기(1) //NaN

default parameter

원래는 b 인자 없을 때 조건문 이용해서 디폴트 값을 줄 수 있지만 ES6에서는 파라미터에 그 값을 지정할 수 있다.

function 더하기(a, b = 10){
  console.log(a + b)
}

더하기(1)

(a, b = 2 * 5) //수학 연산자도 가능
(a, b = 2 * a) //이런것도 가능.

function 함수(){
  return 10
}

(a, b = 함수())// 함수도 가능.

🧨 주의할 점:디폴트 파라미터는 매개변수 수 만큼 인자가 안들어 갔을 때 실행된다.

함수의 argument(옛날 문법)

function 함수(a,b,c){
  for(var i =0; i< arguments.length; i++){
    console.log(arguments[i])
  } // 이런식으로 쓸 수도 있고.
  console.log(arguments);
}
함수(1,2,3)
// 매개변수 순서대로의 키가 부여된 객체로 한꺼번에 나옴.

arguments보다 최신 Rest파라미터

... 의 의미
1) 전개연산자
2) Rest 파라미터

function 함수2(...rest){
  console.log(rest) //rest는 작명 아무거나 가능
};

함수2(1,2,3,4,5,)//[1, 2, 3, 4, 5]

장점

function 함수2(a, b,...rest){
  console.log(a,b) // 1 2
  console.log(rest)
};

함수2(1,2,3,4,5,) //[3, 4, 5]

함수의 매개변수 자리에 쓰이는 . . . 은 무조건 rest고 이외의 경우는 전개연산자로 보면 된다.

🧨 레스트 파라미터는 가장 뒤에 써야 함

연습문제

1)

var a = [1,2,3];
var b = '김밥';
var c = [...b, ...a];
console.log(c); // ["김", "밥", 1, 2, 3]

2)

var a = [1,2,3];
var b = ['you', 'are'];
var c = function(a,b){
  console.log( [[...a], ...[...b]][1] )
}
c(a,b); // "you"

3)

function 함수(a = 5, b = a * 2 ){
  console.log(a + b); // 3 + 6
  return 10
}
함수(3);

4)

function 함수(a = 5, b = a * 2 ){
  console.log(a + b); // 15
}
함수(undefined, undefined);
인자에 아무것도 안들어갔으니까 디폴트 파라미터 ㄱ ㄱ됨

5)

function 어레이(...rest){
  return rest
}

var newArray = 어레이(1,2,3,4,5);
console.log(newArray);  //[1, 2, 3, 4, 5]

6)

var numbers = [2,3,4,5,6,1,3,2,5,5,4,6,7];

function 최대값(...rest){
  console.log(Math.max(...rest));
  //배열을 전개연산자로 풀어줘야 Math.max()가 잘 작동
}

최대값(...numbers)

7) 스트링을 sort하기

function 정렬(string){
  console.log([...string].sort());
}
정렬('bear')

7) 데이터 마이닝 기능
알파벳들의 출현 개수 세는 함수

글자세기('aacbb')라고 입력하면 콘솔창에
{ a : 2, b : 3, c : 1 } 뜨게.

나의 풀이

function 글자세기(string){
  let 글자 = [...string];
  //["a", "a", "c", "b", "b", "b"]
  let result = {a:0, b:0, c:0};
  for(let i =0; i<글자.length; i++){
    if(Object.keys(result)[0] === 글자[i]){
      result.a += 1;
    }
        if(Object.keys(result)[1] === 글자[i]){
      result.b += 1;
    }
        if(Object.keys(result)[2] === 글자[i]){
      result.c += 1;
    }
  }return result
}

console.log(글자세기('aacbbb'))

다른 풀이

function 글자세기(string){
  var 결과 = {};
  [...string].forEach((a)=>{
    if(결과[a] > 0){
      결과[a]++;
    }else {
      결과[a] = 1;
    }
  });
  return 결과;
}
console.log(글자세기('aacbbb'))
profile
주먹구구식은 버리고 Why & How를 고민하며 프로그래밍 하는 개발자가 되자!

0개의 댓글