Skip to content

Latest commit

 

History

History
106 lines (91 loc) · 4.43 KB

File metadata and controls

106 lines (91 loc) · 4.43 KB

Function

  • 특정한 기능을 제공하기 위한 코드의 집합
  • 호출을 통해 결과값을 얻음
  • 객체 자료형 중 하나
  • 함수도 하나의 값처럼 취급되기 때문에 변수에 할당 가능
  • 함수 생성시 함수명은 선택사항으로 함수명 없이 함수를 생성할 수 있음

1. 함수 정의

함수를 정의하는 방법

  1. 함수 선언문으로 정의하는 방법
function ooo(x) { return x*x }
  1. 함수 리터럴로 정의하는 방법
var ooo = function(x){ return x*x }
  1. Function 생성자로 정의하는 방법
var ooo = new Function("x", "return x*x")
  1. 화살표 함수 표현식으로 정의하는 방법
var ooo = x => x*x;
  • 함수 선언문으로 정의한 함수는 호출문이 그보다 앞에 위치해도 호출할 수 있다
console.log(ooo(2)); // 4
function ooo(x) { return x*x }
  • 그러나 함수 리터럴, Function 생성자, 화살표 함수 표현식으로 정의한 함수는 변수에 그 함수의 참조를 할당해야 비로소 사용할 수 있는 상태가 되기 때문에 이 세가지 방법으로 함수를 정의하는 코드는 호출하는 코드보다 앞에 위치해야 한다

매개변수

  • 함수에서 정의된 매개변수보다 많이 사용하면 추가된 매개변수는 무시 -> 입력된 매개변수를 활용할 수 있도록 함수 구현 가능(가변 인자 함수)
  • 함수에서 정의된 매개변수보다 적게 사용하면 부족한 매개변수 대신 undefined가 입력

2. 함수 호출하기

호출 방법

  1. 함수 호출
    • 함수의 참조가 저장된 변수 뒤에 그룹 연산자인 ()를 붙여서 함수를 호출
    var s = square(5);
  2. 메서드 호출
    • 메서드 : 객체의 프로퍼티에 저장된 값이 함수 타입일 때 그 프로퍼티를 메소드라고 함
    • 메서드를 호출 시 그룹 연산자인 ()를 붙여서 호출(1의 방식과 동일)
    obj.m = function() {...}
    obj.m();
  3. 생성자 호출
    • 함수의 참조를 저장한 변수 앞에 new 키워드를 추가하면 함수가 생성자로 동작
    var obj = new Obejct();
  4. call, apply를 사용한 간접 호출
    • 함수의 call과 apply 메서드를 사용하면 함수를 간접적으로 호출할 수 있음

3. 다양한 함수의 형태

중첩함수(Nested Function)

  • 중첩함수 : 특정 함수의 내부에 선언된 함수
  • 지역함수 또는 내부 함수(Inner Function)라고도 함
  • 자바스크립트에서는 외부 함수의 최상위 레벨에만 중첩 함수를 작성할 수 있음
    • 함수 안의 if 문과 while 문 등의 문장 블록 안에는 중첩 함수를 작성할 수 없음
  • 중첩 함수의 참조는 그 중첩 함수를 둘러싼 외부 함수의 지역 변수에 저장되므로 외부 함수의 바깥에서는 읽거나 쓸 수 없음
  • 자신을 둘러싼 외부 함수의 인수와 지역 변수에 접근할 수 있음
  • 외부 함수의 변수 유효 범위가 그 함수의 중첩 함수에까지 미침

익명함수 vs 선언적 함수

  • 익명함수 : <script></script> 태그 내부의 내용을 위에서 아래로 읽어 해석
  • 선언함수 : 다른 내용을 읽고 해석하기 전에 먼저 읽고 해석
  • 함수 선언 이전에 익명함수를 호출하면 오류가 발생하나 선언적 함수는 오류가 발생하지 않음

즉시 실행 함수

  • 일반적으로 익명 함수를 실행할 때는 익명 함수의 참조를 변수에 할당한 후 그룹 연산자인 ()를 붙여서 실행
var f = function() {...};
f();
  • 즉시 실행 함수 : 익명 함수를 정의하고 곧바로 실행하는 구문
(function() {...})()

(function() {...}());

// 즉시 실행 함수에도 인수를 넘길 수 있음
(function(a,b) {...})(1,2);
  • 즉시 실행 함수에도 이름을 붙일 수는 있지만 함수 이름이 함수 내부에서만 유효
  • 함수 실행 결과를 면수에 할당할 수 있으며 표현식 안에서 사용할 수 있음
var x = (function() {...})();
  • 즉시 실행 함수는 전역 유효 범위를 오염시키지 않는 이름 공간을 생성할 때 사용

가변 인자 함수

  • 매개 변수의 개수가 변할 수 있는 함수
  • 정의된 것과 달리 입력된 매개 변수를 모두 활용할 수 있는 함수
  • 모든 함수는 매개 변수를 arguments 배열에 저장함