-

javascript::함수 본문

언어/javascript

javascript::함수

lingi04 2018. 1. 4. 22:48

#####함수####


1. 함수 생성법

함수 : 

여느 언어에서의 함수와 같은 기능을 함.

그 이외에도 모듈화 처리, 클로저, 객체 생성 등 자바스크립트의 근간이 되는 많은 기능 제공.

자바스크립트에서는 함수도 일반 객체처럼 값으로 취급됨(일급객체)

리턴값과 매개변수로 넘기는 값에 변수타입을 기술하지 않는다.


** 함수 리터럴

함수 선언문이나 함수 표현식 모두 이런 함수 리터럴 방식으로 함수를 생성함.

함수리터럴은 function 키워드로 시작한다.


a. 함수 선언문 방식

반드시 함수명이 정의되어 있어야 한다. 


1
2
3
4
5
6
//add 함수 선언문
function add(x, y) {
    return x + y;
}
 
console.log(add(34)); //(출력값) 7
cs

함수명(add)이 있고, 이 함수ㅜ명으로 함수를 호출


b. 함수 표현식 방식으로 함수 생성.

함수를 생성해서 변수에 담을 수 있다.(함수도 하나의 값처럼 취급되기 때문에)

이러한 방식으로 함수 리터럴 방식으로 함수 리터럴로 하나의함수를 만들고, 여기서 생성된 함수를 변수에 할당하여 함수를 생성하는 방식

1
2
3
4
5
6
7
8
9
//add 함수 선언문
var add = function (x, y) {
    return x + y;
}
 
var plus = add;
 
console.log(add(34)); //(출력값) 7
console.log(add(56)); //(출력값) 11
cs

add는 함수 리터럴로 생성한 함수를 참조하는 변수. 함수 이름이 아님.

위의 예제에서는 리터럴로 생성한 함수에 이름이 없다.(익명함수)

add는 함수의 참조값을 가지므로, 또 다른 변수 plus에도 그 값을 그대로 할당할 수 있다.


1
2
3
4
5
6
7
8
9
10
var fatorilVar = function factorial (n){
    if(n <= 1){
        return 1;
    }
    return n*factorial(n-1);
};
 
console.log(factorialVar(3));        //(출력값) 6
console.log(factorial(3));            //(출력값) undefined
 
cs

함수 표현식에서 사용된 함수 이름은 정의된 함수 내부에서 해당 함수를 재귀적으로 호출하거나, 디버거 등에서 함수를 구분할 때 사용된다.

c. Function() 생성자 함수

js의 함수도 Function이라는 기본 내장 생성자 함수로부터 생성된 객체이다.

리터럴 방식으로 생성한 함수 선언문이나 함수 표현식 방식도 내부적으로는 Function ㅅㅇ성자함수로 함수가 생성된다고 볼 수 있다.

1
2
var add = new Function('x''y''return x + y');
console.log(add(34));         //(출력값) 7
cs


d. 함수 호이스팅

생성 방식에 따라 약간씩 동작이 달라짐. 그 중 하나가 함수 호이스팅

함수 표현식만을 사용할 것이 권장됨


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//함수 선언문
 
add(23);    // 5
 
function add(x, y){
    return x + y;
}
 
add(34)     // 7
 
 
//함수 표현식
 
add2(23); //uncaught type error
 
var add2 = function(x, y){
    return x + y;
};
 
add2(34);    //7
cs

==> js의 변수생성, 초기화 작업이 분리되어 진행되기 때문. (5장에서)













'언어 > javascript' 카테고리의 다른 글

javascript:: ==(동등)연산자와 ===(일치) 연산자  (0) 2018.01.04
javascript::유사배열객체  (0) 2018.01.04
javascript::배열  (0) 2018.01.04
javascript::객체  (0) 2018.01.03
javascript :: prototype  (0) 2018.01.02
Comments