ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 12 함수
    모던 자바스크립트 딥 다이브 독학 2023. 10. 9. 08:22

    함수란?

    • 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것
    • 내부로 입력을 전달받는 매개변수, 입력을 인수, 출력을 반환값이라 한다.
    • 함수 정의를 통해 생성한다.
    • 일반 객체는 호출할 수 없지만 함수는 호출할 수 있다.

    함수를 사용하는 이유

    • 유지보수의 편의성을 높이고 실수를 줄여 코드의 신뢰성을 높인다.
    • 코드의 가독성을 향상시킨다.

    함수 리터럴

    // 변수에 함수 리터럴을 할당
    var f = function add(x, y) {
    return x + y;
    };

    기명함수(이름이 있는 함수), 무명/익명함수(이름 없는 함수)

    함수 정의

    //함수 선언문
    function add(x, y) {
    return x + y;
    }
    
    //함수 표현식
    var add = function (x, y) {
    return x + y;
    }
    
    //Function 생성자 함수
    var add = new Function('x', 'y', 'return x + y');
    
    //화살표 함수(ES6)
    var add = (x, y) => x + y;
    • 함수 선언문은 함수 이름을 생략할 수 없다. 함수 선언문은 표현식이 아닌 문이다. 함수 리터럴은 함수 이름 생략 가능하다.
    // 기명 함수 리터럴을 단독으로 사용하면 함수 선언문으로 해석된다.
    // 함수 선언문에서는 함수 이름을 생략할 수 없다.
    function foo() {console.log('foo');}
    foo(); // foo
    // 자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로
    // 생성하고, 거기에 함수 객체를 할당한다.
    
    // 함수 리터럴을 피연산자로 사용하면 함수 선언문이 아니라 함수 리터럴 표현식으로 해석된다.
    // 함수 리터럴에서는 함수 이름을 생략할 수 있다.
    (function bar() { console.log('bar'); });
    bar(); // ReferenceError: bar is not defined
    // 함수 리터럴에서 함수 몸체 외부에서는 함수 이름으로 함수를 참조할 수 없으므로 함수 몸체 외부에서는 
    // 함수 이름으로 호출할 수 없다.(함수를 가리키는 식별자가 없다는 것과 마찬가지)
    • 값의 성질을 갖는 객체를 일급 객체라 한다. 자바스크립트의 함수는 일급 객체다.
    • 함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점은 다르다. (함수 호이스팅) - 함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작
    • 함수 표현식으로 함수를 정의하면 함수 호이스팅이 발생하는 것이 아니라 변수 호이스팅이 발생한다.
    • Function 생성자 함수로 생성한 함수는 클로저를 생성하지 않아 일반적이지 않으며 바람직한 방법이 아니다.
    • 화살표 함수는 항상 익명 함수로 정의한다. (표현만 간략한 것이 아니라 내부 동작 또한 간략화)

    함수 호출

    • 매개변수는 함수 몸체 내부에서만 참조할 수 있다. 매개변수의 스코프(유효 범위)는 함수 내부다.
    • 자바스크립트 함수는 매개변수의 개수와 인수의 개수가 일치하는지 체크하지 않는다.
    • 자바스크립트는 동적 타입 언어다. 따라서 자바스크립트 함수는 매개변수의 타입을 사전에 지정할 수 없다.

    매개변수의 최대 개수

    • 이상적인 함수는 한 가지 일만 해야 하며 가급적 작게 만들어야 한다.
    • 매개변수는 3개 이상 넘지 않는 것을 권장한다.
    • 객체를 인수로 사용하는 경우 프로퍼티 키만 정확히 지정하면 매개변수의 순서를 신경 쓰지 않아도 된다.

    반환문

    • return 키워드 뒤에 반환값으로 사용할 표현식을 명시적으로 지정하지 않으면 undefined가 출력된다.

    함수형 프로그래밍

    • 외부 상태를 변경하지 않고 외부 상태에 의존하지도 않는 함수를 순수 함수라 한다. 함수형 프로그래밍이란 순수 함수를 통해 부수효과를 최대한 억제하여 오류를 피하고 프로그램의 안정성을 높이려는 프로그래밍 패러다임이다.
    • 즉시 실행 함수 → 단 한번만 호출되며 다시 호출할 수 없다.
    (function () {
    var a = 3;
    var b = 5;
    return a * b;
    }());

    콜백 함수: 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수

    고차 함수: 매개변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수

    순수함수: 어떤 외부 상태에도 의존하지 않으며 외부 상태를 변경하지도 않는 함수

    비순수함수: 외부 상태에 의존하거나 외부 상태를 변경하는 함수

    비순수함수를 최대한 줄이는 것은 부수 효과를 최대한 억제하는 것.

    '모던 자바스크립트 딥 다이브 독학' 카테고리의 다른 글

    14 전역 변수  (0) 2023.10.11
    13 스코프  (0) 2023.10.10
    11 원시 값과 객체의 비교  (0) 2023.10.08
    10 객체 리터럴  (0) 2023.10.07
    09 타입 변환, 단축 평가  (0) 2023.10.06
Designed by Tistory.