자바스크립트에서 함수란 일련의 과정을 코드 블록으로 감싸서 하나의 실행 단위로 정의한 문입니다.
함수 정의 방법은 총 4가지가 존재합니다.
함수 선언문
function fn() {}로 정의되며, 함수 호이스팅이 발생해 선언 전 호출 가능.
함수 표현식
const fn = function() {};로 변수에 할당되며, 변수 호이스팅만 발생합니다.
Function 생성자 함수
new Function()으로 동적 생성, 드물게 사용.
화살표 함수
() => {}로 간결하며, this 바인딩이 렉시컬 스코프를 따릅니다.
함수?
자바스크립트에서 함수는 코드 블록으로 정의된 실행 단위로, 특정 작업을 수행합니다.
함수의 장점은 코드 재사용성, 유지보수성, 신뢰성 향상입니다.
함수는 일급 객체로, 변수에 할당하거나 인자로 전달 가능하며, 클로저와 같은 고급 패턴을 지원합니다.
일급 객체로서 함수의 특징
자바스크립트에서 함수는 일급 객체로, 함수는값처럼 취급될 수 있으며,변수에 할당하거나,함수의 인자로 전달하거나,함수에서 반환할 수 있습니다. 이는 함수를 값처럼 취급해 고차 함수나 클로저 같은 패턴을 가능하게 합니다.
화살표 함수?
화살표 함수는 간결한 문법(() => {})을 가지며, this가 렉시컬 스코프에서 바인딩됩니다. 일반 함수는 호출 방식에 따라 this가 동적으로 결정됩니다. 또한, 화살표 함수는 arguments 객체와 생성자(new)로 사용할 수 없습니다.
화살표 함수는 콜백이나 이벤트 핸들러에서 this 혼란을 줄이는 데 유용합니다.
익명함수
익명 함수는 이름이 없는 함수로, 주로 함수 표현식이나 콜백으로 사용됩니다. 예를 들어, 이벤트 리스너나 일회성 로직에서 간결하게 쓰입니다.setTimeout(function() { console.log("Delayed!"); }, 1000); // 익명 함수 콜백
즉시실행함수
IIFE는 정의와 동시에 실행되는 함수로,(function() {})()형태입니다. 주로 스코프를 격리해 전역 오염을 방지하거나 초기화 로직을 실행할 때 사용됩니다.
요즘은 ES6 모듈로 대체되어 사용하는 경우가 많습니다.
함수는 문인데 변수에 할당할 수 있는 이유?
변수에 할당하면 함수는 일급 객체라 값으로 평가되어 가능합니다.
선언문과 표현식의 차이점
함수 선언문(function fn() {})은 호이스팅으로 선언 전 호출 가능하며, 독립적인 문입니다.함수 표현식(const fn = function() {})은 변수에 할당되며, 변수 호이스팅만 발생해 할당 전에는 호출 불가입니다.
순수 함수와 비순수 함수
순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하고, 외부 상태를 변경하지 않습니다. 비순수 함수는 외부 상태를 수정하거나, 출력이 입력 외의 요인(예: 전역 변수)에 의존합니다.
클로저와 함수의 관계는?
클로저는 내부 함수가 외부 함수의 렉시컬 환경을 참조하며 유지하는 구조입니다. 함수가 일급 객체이고 스코프를 가지는 자바스크립트의 특성 덕분에 클로저가 가능합니다.