javascript 4 - 함수

박준영·2024년 12월 3일

함수

함수의 분류

  1. 사용자 정의 함수
    : 사용자가 필요한 기능을 직접 만든 함수
  2. 자바스크립트 코어 함수
    : 자바스크립트가 기본적으로 제공하는 함수
    ex) parseInt(), Math.random() 등

사용 방법에 따른 분류

  1. 일반 함수
    : 가장 일반적으로 사용한 함수
    ex) function funcName() { ~ }

  2. 중첩 함수
    : 함수 안에 함수가 있는 경우 '중첩되었다'고 하며, 함수 안에 있는 함수를 중첩 함수라고 한다.
    : 일반적으로 중첩함수는 이름이 없는 이벤트 리스너로 많이 활용된다.
    ex)

  3. 리터럴 함수
    : 식별자 없이 함수 그 자체를 객체 타입의 '값(리터럴)'으로 생성한 함수.
    ex) var add = function() { ~ } or var add = () => { ~ }

  4. 콜백 함수
    : 함수 실행결과 값을 리턴이 아닌 매개변수로 넘어온 함수를 호출해서 넘겨주는 방식을 '콜백'이라고 하며, 이때 매개변수로 넘어온 함수를 콜백함수라 한다.
    : 즉, 어떤 함수의 인자로 함수가 전달된 함수이다.
    : 주로 로직의 구현부와 처리부를 분리해야 할 경우에 적합하다.

    • 장점
      • 함수를 인수로 전달하기 때문에 함수를 정의함에 있어 가독성에 강한 면모가 있다. 단, 과도한 콜백은 역효과로 콜백지옥에 빠질 수 있다.
      • 함수를 정의하지 않고 익명함수로 인자를 전달할 수 있다.
      • 비동기 처리 방식의 문제점을 해결할 수 있다.
        • 비동기란 특정 코드의 실행을 기다리지 않고 바로 다음 코드를 실행시키는 병렬처리를 말한다.
        • 이 경우 콜백 함수를 사용하게 되면 먼저 인자로 전달된 콜백함수의 실행이 끝난 후에 본 함수가 실행되므로, 비동기를 처리할 수 있게 된다.
    • 단점
      • 콜백 지옥에 빠지기 쉽다
      • 에러의 처리가 어렵다.

    ex)

  1. 클로저 함수 (closure function)
    : 자바스크립트의 함수가 자신이 선언된 렉시컬 환경(lexical environment)을 기억하여 그 환경 밖에서 호출되더라도 해당 환경에 접근할 수 있는 것을 말한다.

    • 장점
      • 연관있는 변수와 기능을 하나의 함수로 묶어서 독립적으로 실행시킬 수 있다
      • 함수 내부에 데이터가 만들어 지기 때문에 함수 외부에서 수정할 수 없는 보호된 데이터를 만들 수 있다.

    ex)

    • 위 코드와 같이, newFunction에 inner()라는 함수가 반환되었는데, 이 inner 함수는 newFunction에게 반환 되었어도 (함수 outer 외부로 빠져나갔더라도) 상위 함수인 outer의 파라미터인 outVal에 접근할 수 있다.
      따라서 newFunction("inside")를 호출하게 되면 inner 함수가 실행되게 되는데, 이 inner가 여전히 상위 함수인 outer의 파라미터 outVal을 기억하고 있으므로, 콘솔 창에는 outVal과 inVal이 모두 출력되게 된다.

    ex)

    • 클로저 함수를 사용하게 되면 위 코드와 같이, count라는 변수의 값은 외부에 숨기고 함수만으로 해당 변수의 값을 수정하거나 조회해 올 수 있게 된다.

참조한 글

0개의 댓글