Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

동그란 도그린

[모던 자바스크립트 Deep Dive🦎] 12장 : 함수 본문

FrontEnd/Javascript

[모던 자바스크립트 Deep Dive🦎] 12장 : 함수

도그rin 2023. 5. 6. 19:54

📍 함수

  • 자바스크립트의 함수는 객체 타입의 값
  • 자바스크립트는 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성 후 그 식별자에 객체를 할당 ⇒ 함수는 함수 이름이 아닌 함수 객체를 가리키는 식별자로 호출

 

  • 함수 정의 방식
함수 선언문 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 키워드, 함수 이름, 매개변수 목록, 함수 몸체로 구성
    • 함수 이름 생략 가능 (익명 함수)
    // 변수에 함수 리터럴 할당
    var f = function add(x, y) {
    	return x+y;
    };
    

 

  • 함수 선언문
    • 함수 이름 생략 불가능
    • 표현식이 아닌 문 ⇒ 변수에 할당 불가
    • 함수 선언문으로 정의한 함수는 함수 선언문 이전에 함수 호이스팅에 의해 호출 가능 (함수 선언문은 런타임 이전에 자바스크립트 엔진에 의해 먼저 실행됨)

 

  • 함수 표현식
    • 함수 리터럴로 생성한 함수 객체를 변수에 할당하는 방식
      • 🔅 자바스크립트의 함수는 값의 성질을 갖는 객체인 일급 객체
    • 함수 표현식으로 정의한 함수는 함수 표현식 이전에 호출 불가 (함수 호이스팅이 아닌 변수 호이스팅이 발생하므로 함수 표현식 이전에 함수를 참조하면 undefined로 평가되고, 타입 에러가 발생)

 

🔅 함수 호이스팅은 함수를 호출하기 전에 반드시 함수를 선언해야 하는 규칙을 무시하므로 함수 선언문 대신 함수 표현식을 사용할 것을 권장

 

  • Function 생성자 함수
    • 일반적이지 않고 바람직하지 않은 방식
    • 함수 선언문이나 함수 표현식으로 생성한 함수와는 동일하게 동작하지 않음

 

  • 화살표 함수
    • 항상 익명 함수로 정의
    • 기존의 함수보다 표현만 간략한 게 아니라 내부 동작도 간략화됨
    • 생성자 함수로 사용 불가, 기존 함수와 this 바인딩 방식이 다름, prototype 프로퍼티 없음, arguments 객체 생성 X

 

📍 함수 호출

  • 매개변수
    • 매개변수의 스코프(유효범위)는 함수 내부
    • 함수는 매개변수의 개수와 인수의 개수가 일치하는지 체크 X
      • 개수가 달라도 에러 발생 X
      • 인수가 부족해서 할당되지 않은 매개변수의 값은 undefined
      • 매개변수보다 인수가 더 많으면 초과된 인수가 무시됨 (버려지진 X)
      • 모든 인수는 arguments 객체의 프로퍼티로 보관됨

 

📍 다양한 함수의 형태

  • 즉시 실행 함수
    • 함수 정의와 동시에 즉시 호출되는 함수
    • 단 1번만 호출되며, 다시 호출할 수 없음
    • 익명 함수는 사용하는 것이 일반적
    • 즉시 실행 함수는 반드시 그룹 연산자 (…)로 감싸야 함 (감싸지 않으면 에러 발생)
    • 일반 함수처럼 값 반환과 인수 전달 가능
    (function () {
    	var a = 1;
    	var b = 2;
    	return a*b;
    }());
    

 

  • 중첩 함수
    • 중첩 함수/내부 함수 : 함수 내부에 정의된 함수, 자신을 포함하는 외부 함수를 돕는 헬퍼 함수의 역할
    • 외부 함수 : 중첩 함수를 포함하는 함수
    • 중첩 함수는 고정되어 있어 교체하기 곤란함

 

  • 콜백 함수
    • 콜백 함수 : 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수
    • 고차 함수 : 매개 변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수
    • 콜백 함수는 자유롭게 교체 가능
    • 고차 함수는 콜백 함수를 자신의 일부분으로 함성함
    • 고차 함수는 매개변수를 통해 전달받은 콜백 함수의 호출 시점을 결정해서 호출함

 

  • 순수 함수와 비순수 함수
    • 순수 함수 : 어떤 외부 상태에 의존하지 않고, 변경하지 않고, 부수 효과가 없는 함수
    • 비순수 함수 : 외부 상태에 의존하거나 외부 상태를 변경하고, 부수 효과가 있는 함수
    • 순수 함수는 동일한 인수가 전달되면 언제나 동일한 값을 반환, 인수의 불변성을 유지
    • 내부 상태가 호출될 때마다 값이 변화하면 비순수 함수
Comments