본문 바로가기
자바스크립트 (JavaScript)/이론

[ JS 데이터 ] 참조형 - Function

by Hwanii_ 2023. 10. 30.
728x90
//  [ JS 데이터 ] 참조형 - Function

function hello() {
    console.log('Hello !')
}

hello() //  함수 호출 (call) => Hello !

//  만약에 hello() 가 아니라 hello 만 작성 하면 어떠한 개념 일까 ?
//  함수명에 소괄호 () 를 붙히는 것 => 해당 함수를 호출.
//  즉, 소괄호 () 를 붙히지 않으면, 함수를 호출 하지 않음.
//  함수명 만 작성시 => 함수 그 자체 (덩어리) 라고 생각 하면 된다.

console.log(hello)  //  함수의 정보 그 자체가 나오는 것을 볼 수 있다.

//  ===========================================================

function getNumber() {
    return 123
}

console.log(getNumber)  //  함수 자체 출력.

console.log(getNumber())    //  123 (return 값이 출력 된다)

console.log(typeof getNumber)   //  function

console.log(typeof getNumber()) //  number

//  ===========================================================

const getNumber2 = function () {    //  함수 데이터 자체를 변수에 담을 수도 있다.
    return 123
}

console.log(typeof getNumber2)  //  function => getNumber2 라는 변수는 하나의 함수 데이터가 되었다.

console.log(typeof getNumber2())    //  number

console.log(getNumber())    //  123

//  즉 함수의 호출은 함수가 반환 하는 return 값

//  ===========================================================

const a = function () {
    console.log('A')
}

const b = function (c) {    //  매개변수 c
    console.log(c)  //  123
}

b(123)  //  b() 함수에 인자로 123을 대입 하기.

b(a)    //  인자로 const a 를 대입 하기. -> console.log(a) 가 되므로, a 함수 데이터 자체가 출력 된다.

//  위의 예제는 익명 함수를 변수에 대입 하는 경우이고,
//  b() 라는 표기 방법이 좀 어색 하긴 하지만 익숙해져야 할 듯 하다.

//  자바와 다르게 자바스크립트는 함수가 객체 처럼 다루어질 수 있고,
//  자바스크립트 에서는 함수를 변수에 할당 할 수 있다.
//  또한 이렇게 함수가 대입된 변수명 뒤에 함수 처럼 소괄호 () 를 붙혀서,
//  대입된 함수를 호출 할 수 있는 특징을 가진다.

//  자바에서 함수를 변수에 대입 하기 위해서는,
//  람다식과 인터페이스를 사용 해야 한다.

 

함수가 객체 처럼 다루어지기 때문에, 익명 함수가 대입된 변수 b는 해당 익명 함수를 참조 하게 된다.

 

따라서, 변수 b를 b() 와 같이 호출 하게 되면, 변수가 참조 하고 있는 익명 함수가 실행 된다.

 

반응형