누가봐도 인생 1회차의 기록장

개발공부/JavaScript 책

인사이드 자바스크립트 #08 (함수 호출과 this, 함수리턴) ☆★

김놀먹 2021. 11. 1. 18:19

함수호출

함수를 호출하여 코드를 실행하는 것

 

arguments 객체

C와 같은 엄격한 언어와 달리 자바스크립트에서는 함수를 호출할 때 함수 형식에 맞춰 인자를 넘기지 않더라도 에러가 발생하지 않는다.

  • 정의된 함수의 인자보다 적게 함수를 호출했을 경우 : 넘겨지지 않은 인자에게 undefined 값이 할당
  • 정의된 인자 개수보다 많게 함수를 호출 했을 경우 : 에러가 발생하지 않고, 초과된 인수는 무시

이러한 특성 때문에 함수 코드를 작성할 때, 런타임 시에 호출된 인자의 개수를 확인하고 이에 따라 동작을 다르게 해줘야할 경우가 있는데, 이를 가능케 하는 것이 바로 arguments 객체이다. arguments 객체는 매개변수 개수가 정확하게 정해지지 않은 함수를 구현하거나, 전달된 인자의 개수에 따라 서로 다른 처리를 해줘야 하는 함수를 개발하는 데 유용하게 사용할 수 있다. 

 


호출 패턴과 this 바인딩 (가장 이해 안되는 파트ㅎㅎ;)

자바스크립트에서 함수를 호출할 때 기존 매개변수로 전달되는 인자값에 더해 arguments 객체 및 this 인자가 함수 내부로 암묵적으로 전달된다. 

 

 

객체의 메서드 호출할 때 this 바인딩

객체의 프로퍼티가 함수일 경우, 이 함수를 메서드라고 부른다. 이러한 메서드를 호출할 때, 메서드 내부 코드에서 사용된 this는 해당 메서드를 호출한 객체로 바인딩 된다. 


함수를 호출할 때 this 바인딩

자바스크립트에서는 함수를 호출하면 해당 함수 내부코드에서 사용된 this는 전역 객체에 바인딩 된다. 브라우저에서 자바스크립트를 실행하는 경우 전역 객체는 window 객체가 된다.


생성자 함수를 호출할 때 this 바인딩

  • 생성자 함수가 동작하는 방식
    • 빈 객체 생성 및 this 바인딩
    • this를 통한 프로퍼티 생성
    • 생성된 객체 리턴

call 과 apply 메서드를 이용한 명시적인 this 바인딩

apply() 메서드는 호출하는 주체가 함수고, apply() 메서드도 this를 특정객체에 바인딩할 뿐 결국 본질적인 기능은 함수 호출이라는 것이다. 이러한 apply()나 call() 메서드는 this를 원하는 값으로 명시적으로 매핑해서 특정 함수나 메서드를 호출할 수 있다는 장점이 있다.


함수 리턴

자바스크립트 함수는 항상 리턴값을 반환한다. 특히 return 문을 사용하지 않았더라도 다음의 규칙으로 항상 리턴값을 전달하게 된다. 

  1. 일반 함수나 메서드는 리턴값을 지정하지 않을 경우 undefined 값이 리턴된다. 
  2. 생성자 함수에서 리턴값을 지정하지 않을 경우 생성된 객체가 리턴된다.