TIL

[TIL]230321 - JavaScript 함수, setTimeout 함수

ssohyunn 2023. 3. 21. 19:56

deep dive 12장 함수

오늘은 deep dive 12장-함수를 정리했다. 그 중 핵심 내용을 정리하자!

  • 🌟 함수 이름은 함수 몸체 내에서만 참조할 수 있는 식별자다 -> 함수를 호출할 때는 함수 객체를 가리키는 식별자를 사용해야 한다.
  • 함수를 정의하는 방식은 4가지가 있는데, 그 중에서 함수 선언문이랑 함수 표현식의 차이를 정확히 알자

함수 선언문

  • 함수 이름을 생략 할 수 없다.
  • 표현식이 아닌 문이므로 변수에 할당할 수 없다.
  • 자바스크립트 엔진은 코드 문맥에 따라, 즉 값으로 평가되어야 하는 문맥인지 확인하고 동일한 함수 리터럴을 함수 선언문으로 해석하는 경우와 함수 리터럴 표현식으로 해석한다.
  • 자바스크립트 엔진은 런타임 이전에 함수 선언문을 해석해 함수 객체를 생성한다.
    이때 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성해서 함수 객체를 할당한다. => 함수 호이스팅: 함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작

함수 표현식

  • 함수 이름을 생략 하는 것이 일반적이다.
  • 함수 표현식으로 함수를 정의하면 함수 호이스팅이 발생하는 것이 아니라 변수 호이스팅이 발생한다.

참조에 의한 전달

  • 객체 타입 인수는 참조 값이 복사되어 매개변수에 전달된다. => 함수 몸체에서 객체를 변경할 경우 원본이 훼손된다. 

즉시 실행 함수

함수의 정의와 동시에 즉시 호출되는 함수, 단 한번만 호출된다.

  • 반드시 그룹 연산자로 감싼다. 
  • 그룹 연산자 내의 기명 함수는 함수 리터럴로 평가된다. 
  • 익명 함수를 사용하는 것이 일반적이다.
(function(){
  var a = 3;
  var b = 5;
  return a * b;
}());

 

콜백 함수

함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수, 경우에 따라 변경되는 로직을 추상화해서 함수 외부에서 내부로 전달한다.

  • 고차 함수: 콜백 함수를 전달받은 함수
  • 익명 함수 리터럴은 고차 함수가 호출될 때마다 평가되어 함수 객체를 생성한다. 고차 함수가 자주 호출되면 외부에서 콜백 함수를 정의하자

순수 함수와 비순수 함수

순수 함수: 외부 상태에 의존x, 변경x, 부수 효과x

비순수 함수: 외부 상태에 의존, 외부 상태를 변경, 부수 효과o

 


setTimeout

setTimeout(functionRef, delay)

- functionRef: 타이머가 만료된 후 실행될 함수

- delay: functionRef가 실행되기 전 타이머가 대기해야 하는 시간(밀리초)

- 반환값: timeoutID  (타이머를 식별하는 양의 정수)

 

clearTimeout(timeoutID)

이전에 설정한 시간 제한을 취소한다.