chapter 15-01

자바 스크립트의 함수란, 함수로 기능하기 위한 추가적인 프로퍼티와 메소드를 가지고 있는 객체입니다. 즉, 일반 객체의 확장입니다. console.dir를 통해 내부 정보를 볼 수 있습니다. https://meetup.toast.com/posts/118

함수의 선언과 호출

함수를 선언하는 방법은 4가지가 존재합니다.

  1. 함수 선언문

function 함수명(인자) {
	명령
}
  1. 함수 표현식(익명 함수)

let f = function (인자){
	명령
}

이름이 없는 익명함수를 만들 수 있습니다. 이렇게 만든 익명 함수는 반드시 위와 같이 변수에 담아주어야 사용할 수 있습니다. 이렇게 할당된 변수는, f(인자); 와 같은 식으로 실제로 실행할 수 있습니다.

  1. 즉시 실행 함수 기명 즉시 실행 함수

	(function 함수명(인자){
		명령
	}(실제 인수)):

익명 즉시 실행 함수

	(function(인자){
		명령
	}(실제 인수)):

위의 함수 선언문 또는 함수 표현식을 ()(인수); 로 감싼 형태라고 이해하시면 됩니다. 생성과 동시에 실행됩니다. (선언(인수)) 과 같은 식으로도 쓸 수 있습니다.

  1. 화살표 함수

(인자) => { 명령 }

ES6부터 지원하는, 익명함수의 더 간단한 표현법입니다. 인자가 하나인 경우 괄호는 생략 가능합니다. 함수형 프로그래밍에서 유용하게 사용됩니다. 모든 화살표 함수는 익명함수이며, 기명함수로는 생성이 불가능합니다.

중요한 차이점으로, 화살표 함수가 메소드의 내부 함수로 활용될 경우, 화살표 함수 내부의 this는 자동으로 자신을 포함한 메소드의 소유주(객체)를 바인딩합니다. 일반 익명 함수의 경우는 이런 식으로 사용할 경우 그냥 전역 객체 window를 가리킵니다...... 이는 자바 스크립트의 설계자도 인정한 결함이라고 하네요. https://velog.io/@padoling/JavaScript-%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98%EC%99%80-this-%EB%B0%94%EC%9D%B8%EB%94%A9

함수와 호이스팅

사실상 자바스크립트 호이스팅의 존재 이유. var 변수의 hoisting은 의도치 않은 부작용에 가깝습니다(따라서 let, const는 호이스팅이 사실상 안되게 막아 놓았습니다).

  1. 함수 선언문의 경우 호이스팅이 일어납니다.

  2. 함수 표현식의 경우, 호이스팅이 일어나지만,

count();

var count = function() {
    console.log('count는 1이다.');
}

다음과 같은 코드를 돌려보면 count()는 함수가 아니라는 에러 문구를 받습니다. 변수 count가 호이스팅이 되면, count()위로 가게 되기 때문입니다. 변수와 함수가 함께 호이스팅 되면, 변수가 우선합니다. 3. 화살표 함수는 기본적으로 익명함수와 같습니다. 따라서 호이스팅 여부 역시 같습니다.

Last updated