js function 함수

함수

  • js는 primitive type이 wrapper인 것처럼 함수 또한 객체이다.
  • 함수는 closure 와 같이 함수를 리턴할 수 있다.
const fn = new Function("x, y", "return x+y");
console.log(fn(1,7));
  • 위의 방식보다는 아래의 함수선언식과 함수표현식을 주로 사용한다.

함수선언식

  • function 뒤에 함수의 이름을 설정하는 방식을 함수 선언식(Function Declarations) 이라 한다.
  • 변수의 값이 할당되지 않을 경우에 대비하여 default 값을 설정할 수 있다.
  • 호이스팅으로 인해 함수 선언식은 정의하기 전에 호출해도 동작한다.
  • var 는 undefined 문제로 사용을 꺼린다면, 함수 선언식은 호이스팅으로 인하여 어디서든 해당 기능을 사용할 수 있으므로 선호하는 경우가 있다.
greeting()

function greeting(name = '여러분'){
  const msg = `Hello, ${name}`;
  console.log(msg)
}

greeting('김길동')

함수 표현식

  • 반대로 변수를 먼저 선언하고 함수를 대입하는 방식이 함수표현식(Function Expression)이다. 익명함수라고도 한다.
  • 함수표현식은 호이스팅을 지원하지 않아, 해당 기능을 선언하기 전에 호출하면 에러를 만든다.
  • 다만 함수가 객체임을 들어내는 방식이기 때문에 이로 인하여 선호하기도 한다.
// greeting('함수표현식!') // "ReferenceError: Cannot access 'greeting' before initialization

const greeting = function (name = '여러분'){
  const msg = `Hello, ${name}`;
  console.log(msg)
}

greeting('함수표현식!')

화살표현식

  • 자바에서는 람다라고 하는데 js는 화살표현식이라 한다.
  • -> 에서 => 로 차이를 가진다.
let greeting = (name) => console.log(`Hello, ${name}`);

greeting('김길동')

화살표 함수와 메서드

  • 화살표함수의 this는 지역변수가 아닌 전역변수이다.
  • 브라우저 환경에서 this 는 window를 의미한다.
let kim = {
  name:'김길동',
  age:20,
  toString : () => console.log(`저의 이름은 ${this.name}입니다.`)
}

kim.toString() // "저의 이름은 JS Bin Output 입니다."