function 함수 VS 화살표 함수

WONNY_LOG·2023년 9월 18일
0

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로 호출이 불가하다

자바스크립트에서 함수를 정의하는 방법

  1. named function declaration (명명 함수 선언)
function hello() {
  // ...
}
  1. anonymous function expression (익명 함수 표현)
var hello = function () {
  //...
}
  1. named function expression (명명 함수 표현)
var hello = function originalName() {
  // ...
}
  1. Immediately-invoked expression (즉시 실행 표현)
var hello = (function () {
  //...
})()
  1. function constructor
var hello = new Function()
  1. 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화살표함수
즉시실행함수

0개의 댓글