function
function 키워드를 가지고 정의함
function main() {
return 'function';
};
- 함수 선언식과 함수 표현식으로 정의할 수 있다.
- js에서 모든 함수는 실행 될때마다 함수 내부에 this라는 객체가 추가됨
- this에 바인딩할 객체가 정적으로 결정되는 것은 아니고, 함수를 호출할 때 함수가 어떻게 호출되는지에 따라 this에 바인딩할 객체가 동적으로 결정된다.
- arguments 사용 가능
일반 함수에서 this가 바인딩 되는 상황
- 함수 실행시에는 전역(window) 객체를 가리킨다.
- 메소드 실행시에는 메소드를 소유하고 있는 객체를 가리킨다.
- 생성자 실행시에는 새롭게 만들어진 객체를 가리킨다.
# 화살표 함수
> ES6문법에서 처음 소개되어 function 키워드 대신 화살표=>를 사용한 것
const main = () => 'function';
- 문법이 간결하다
- 자체적으로 가리키는 this가 없다.
- 함수를 선언할 때 this에 바인딩할 객체가 정적으로 결정된다.
- 화살표 함수의 this 언제나 상위 스코프의 this를 가리킨다
- arguments 사용 불가 / rest 파라미터를 사용하면 사용가능하다
차이점
- 문법의 차이
- 가장 큰 차이점인 this와 arguments바인딩 방식 차이
- 화살표 함수는 new로 호출이 불가하다
자바스크립트에서 함수를 정의하는 방법
- named function declaration (명명 함수 선언)
function hello() {
}
- anonymous function expression (익명 함수 표현)
var hello = function () {
}
- named function expression (명명 함수 표현)
var hello = function originalName() {
}
- Immediately-invoked expression (즉시 실행 표현)
var hello = (function () {
})()
- function constructor
var hello = new Function()
- arrow function (화살표 함수)
var hello = () => {
}
함수 선언식
함수 선언은 function으로 시작한다
function foo() {
return "이것은 함수입니다.";
}
- 선언 된 함수는 나중 사용을 위해 저장되며, call 될 때 실행된다.
foo();
함수 표현식
함수가 변수로 저장될수 있다
var x = function (a, b) {return a * b};
- 함수 표현식이 변수에 저장되면, 변수는 함수처럼 사용할 수 있다.
- 변수에 저장된 함수는 함수명이 필요 없으며, 변수 이름을 통하여 호출된다.
차이
- 함수 선언식은 코드가 실행되기 전에 로드되지만, 함수 표현식은 인터프리터가 해당 코드 줄에 도달할 때만 로드된다.
- 함수 선언식은 호이스팅에 영향을 받지만, 함수 표현식은 호이스팅에 영향을 받지 않는다.
- 함수 선언식은 코드를 구현한 위치와 관계없이 자바스크립트의 특징인 호이스팅에 따라 브라우저가 자바스크립트를 해석할 때 맨 위로 끌어 올려진다.
- 일반적으로 두표현식을 같이 사용할 수 있지만, 함수표현식은 함수 이름이 필요없기에 가독성이 더 높다는 장점이 있다.
즉시 실행 함수(IIFE)
정의되자마자 즉시 실행되는 함수
(function () {
console.log("IIFE");
})();
(() => {
console.log("IIFE");
})();
- 소괄호(())로 함수를 감싸서 실행하는 문법을 사용한다.
- 즉시실행함수에도 이름을 붙여 기명 즉시실행함수로 사용 할 수 있다.
- 즉시실행함수는 선언과 동시에 호출되어 반환되어 재사용 할 수 없기 때문에 이름을 지어주는 것이 의미가 없다.
사용 이유
- 필요없는 전역 변수의 생성을 줄일 수 있다.
- private한 변수를 만들 수 있다.
일반함수vs화살표함수
즉시실행함수