티스토리 뷰
1. 함수
함수는 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 함수는 함수정의를 통해 생성한다.
3. 함수 리터럴
자바스크립트의 함수는 객체 타입의 값이다. 일반 객체와의 차이점으로는 호출 가능성의 유무이다. 함수는 호출 가능하지만, 일반 객체는 호출이 불가하다. 함수 리터럴은 funtion 키워드, 함수 이름, 매개 변수 목록, 함수 몸체로 구성된다.
4. 함수 정의
함수 정의란 함수를 호출하기 이전에 인수를 전달받을 매개변수와 실행할 문들, 그리고 반환할 값을 지정하는 것을 말한다. 함수를 정의하는 방법에는 4가지가 있다.
1. 함수 선언문
4. 화살표 함수
함수 선언문
함수 선언문은 함수 이름을 생략할 수 없다는 특징이 있다. 함수 선언문은 표현식이 아닌 문이다.
function foo() {console.log('foo');} // 1번
foo();
(function bar(){console.log('bar')}); // 2번
bar();
2번에서는 그룹 연산자 () 내에 있는 함수 리터럴은 함수 선언문으로 해석되지 않고 함수 리터럴 표현식으로 해석된다. 그룹 연산자의 피연산자는 값으로 평가될 수 있는 표현식이어야만 한다. 그렇기에 함수 이름으로 함수를 호출할 수 없다(함수를 가리키는 식별자가 없다). 따라서 bar 함수는 호출 할 수 없게 된다.
그러나 1번은 foo라는 이름으로 호출 할 수 있는데, 자바스크립트 엔진은 생성된 함수를 호출하기 위해 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성하고 함수 객체를 할당하기 때문이다.
함수 호이스팅
함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 함수 호이스팅이라고 한다. 변수 할당문의 값은 할당문이 실행되는 시점, 즉 런타임에 평가되므로 함수표현식의 함수 리터럴도 할당문이 실행되는 시점에 평가되어 함수 객체가 된다. 따라서 함수표현식으로 함수를 정의하면 함수 호이스팅이 아니라 변수 호이스팅이 발생한다.
6. 참조에 의한 전달
앞서 계속 봤던 것과 마찬가지로 원시타입 인수는 값을 변경하게 된다면 값의 재할당이 이루어져 부수 효과가 발생하지 않지만 객체 타입 인수는 참조 값이 복사되어 매개변수에 전달되기 때문에 부수효과가 발생하게 된다.
7. 다양한 함수의 형태
// 즉시 실행함수
(function () {
}());
- // 콜백 함수 function repeat(n, f){ // f는 또다른 함수 for... f(); } 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백함수라 하며, 매개변수를 통해 함수의 외부에서 콜백 함수를 전달받은 함수를 고차함수라 한다.
외부상태에 의존하지 않고 변경하지도 않는, 즉 부수 효과가 없는 함수를 순수함수라 하며, 반대로 외부 상태에 의존하거나 외부 상태를 변화나는, 즉 부수효과가 있는 함수를 비순수함수라 한다.
'JavaScript' 카테고리의 다른 글
[JavaScript] Map (2) | 2023.08.14 |
---|---|
JavaScript 키워드 (0) | 2023.04.04 |
JavaScirpt 변수 (0) | 2023.04.03 |
JavaScript 원시 값과 객체의 비교 (0) | 2023.03.31 |
JavaScript 객체 (0) | 2023.03.30 |
- Total
- Today
- Yesterday