본문 바로가기

항해99_10기/105일의 TIL & WIL

[20221111] 함수의 매개변수

오늘 배운 것

  • spread operator: function 함수이름 (...매개변수)를 통해, 요소의 나열만으로 함수 내에서 arry로 받아올 수 있음
function findMin(...arr) {
  console.log(arr); // [ 100, 40, 6, 2, 90, 180 ]
  let output = arr[0];
  for (const item of arr) {
    if (output > item) {
      output = item;
    }
  }
  return console.log(output); // 2
}

findMin(100, 40, 6, 2, 90, 180);


// 아래는 앞의 숫자는 각각의 개별 매개변수로 받아오고, 나머지를 배열로 받아 옴
function findMin(a, b, ...arr) {
  console.log(a, b, arr); // 100 40 [ 6, 2, 90, 180 ]
  let output = arr[0];
  for (const item of arr) {
    if (output > item) {
      output = item;
    }
  }
  return console.log(output); // 2
}

findMin(100, 40, 6, 2, 90, 180);

// spread operator를 이용해서 배열을 배열 / 숫자로 받는 법
function findMin(...arr) {
  console.log(arr);
}

const array = [100, 40, 6, 2, 90, 180];

findMin(array); // [ [ 100, 40, 6, 2, 90, 180 ] ] -> 배열 안에 배열로 들어옴
findMin(...array); // [ 100, 40, 6, 2, 90, 180 ] -> 배열 안에 숫자로 들어옴
  • 기본 매개변수
    • 매개변수가 항상 같을 때, 매개변수에 기본 값을 지정할 수 있음
    • 단, 첫번째 매개변수에는 기본값을 지정할 수 없음
    • 기본 매개변수를 함수에서 지정했더라도, 함수를 사용할 때, 해당 매개변수에 다른 값을 줄 수 있음
function name(a, b=기본값, c=기본값)

// 오늘 공부한 quick sort에서도 이와 같은 기본 매개변수를 이용함
function pivot(arr, start = 0, end = arr.length - 1) {
  const swap = (arr, idx1, idx2) => {
    [arr[idx1], arr[idx2]] = [arr[idx2], arr[idx1]];
  };

  // We are assuming the pivot is always the first element
  let pivot = arr[start];
  let swapIdx = start;

  for (let i = start + 1; i <= end; i++) {
    if (pivot > arr[i]) {
      swapIdx++;
      swap(arr, swapIdx, i);
    }
  }

  // Swap the pivot from the start the swapPoint
  swap(arr, start, swapIdx);
  return swapIdx;
}

function quickSort(arr, left = 0, right = arr.length - 1) {
  if (left < right) {
    let pivotIndex = pivot(arr, left, right); //3
    //left
    quickSort(arr, left, pivotIndex - 1);
    //right
    quickSort(arr, pivotIndex + 1, right);
  }
  return console.log(arr);
}

quickSort([100, -3, 2, 4, 6, 9, 1, 2, 5, 3, 23]);
  • arguments : 구 버전의 자바스크립트에서 함수 내부에서 사용할 수 있었던 매개변수 매개변수와 관련된 여러 정보를 확인할 수 있고 배열과 비슷하게 사용할 수 있으나 (callee: f와 Symbol(Symbol.iterator):f 값을 가짐) , 배열이 아니므로, 일반적인 배열과 같이 사용하면 여러 위험을 내포하고 있음
    • spread operator가 없던 구버전에서는 apply() 함수를 사용하였음
    • 구버전에서는 기본 매개변수를 아래와 같이 작성하였음
function earnings(wage, hours) {
	wage = typeof(wage) != undefined ? wage : 8590
    hours = typeof(hours) != undefined ? hours : 52
    return wage * hours
}

// 매개변수로 들어오는 값이 false (0, 빈 문자열 등 false로 반환되는 값 포함) 아닌 것이 확실하다면 아래와 같이 표현
function earnings(wage, hours) {
	wage = wage || 5890
    hours = hours || 52
    return wage * hours
}
  • 함수 표현식과 선언식
    • 선언식 : function 함수명 () {함수 내용} =>의 형태로 문서를 실행하면 호이스팅 됨
    • 표현식 : let 함수명 = function () {함수 내용} => 의 형태로 호이스팅의 영향을 받지 않음
 

함수 표현식 vs 함수 선언식

(기본) 자바스크립트 함수 표현식과 함수 선언식에는 어떠한 차이점이 있는지 알아봅니다.

joshua1988.github.io