함수 선언식(명명 함수 선언)

function func(name) {
    console.log(name);
}

func('seok');

함수 표현식(함수 리터럴)

var func = function(name) {
    console.log(name);
};

func('seok');

함수 표현식은 또 익명함수 표현과 명명함수 표현으로 나뉜다


var func = function () {
  //...
}

var func = function originalName() {
  // ...
}

화살표 함수

var func = () => {
    console.log(name);
};

func('seok');

Function 객체

//객체 방식
var func = new Function('name', 'console.log(name)');

func('seok');

const adder = new Function('a', 'b', 'return a + b')
adder(2, 6)

즉시실행 함수

함수 정의와 동시에 즉시 호출되는 함수를 즉시 실행 함수 (IIFE, Immediately Invoked Function Expression) 라고 한다. 즉시 실행 함수는 단 한 번만 호출되며 다시 호출할 수 없다.

(function(name) {
    console.log(name);
})('seok');

즉시실행 함수 특징

  1. 즉시 실행 함수는 함수 이름이 없는 익명 함수를 사용하는 것이 일반적이다.
    함수 이름이 있는 기명 즉시 실행 함수도 사용할 수 있다. 하지만 즉시 실행 함수를 다시 호출할 수는 없다.
//익명 즉시 실행함수
(function () {
  var a = 3;
  var b = 5;
  return a * b;
})();

//기명 즉시 실행 함수
(function foo() {
  var a = 3;
  var b = 5;
  return a * b;
})();
foo(); //ReferenceError: foo is not defined
  1. 즉시 실행 함수는 반드시 그룹 연산자 (...)로 감싸야 한다.

function () {
 //SyntaxError: Function statements require a function name
  1. 일반적으로 즉시 실행 함수는 정의와 동시에 한번밖에 호출할 수 밖에 없지만, 함수표현식으로 정의하면 여러번 반복해서 호출 할 수 있다.
var myCounter = (function (initialValue = 0) {
  let count = initialValue
  return function () {
    count++
    return count
  }
})(1)

myCounter() // 2
myCounter() // 3
myCounter() // 4
  1. 즉시 실행 함수로, 클로져를 활용할 수 있다. 내부 함수는 변수나 다른 함수등을 쓸 수 있지만,이 함수 밖에서는 완전히 캡슐화되어 접근 할 수 없다.
var myCounter = (function (initialValue = 0) {
  let count = initialValue
  return function () {
    count++
    return count
  }
})(1)

myCounter() // 2
myCounter() // 3
myCounter() // 4

0개의 댓글