본문 바로가기
Javascript

[Javascript] 함수(2)

by 기리의 개발로그 2022. 8. 3.

반환값

함수 내에서 수행된 결과를 return 키워드를 이용하여 반환할 수 있으며 반환된 값을 반환값이라 한다. 배열 등을 이용하여 한 번에 여러 개의 값을 반환할 수 있다.

function sum(s1, s2) {
    var result = s1 + s2;
    return result;
}

console.log(sum(10, 20));  // 30

function mul(m1, m2, m3) {
    var result1 = m1 * m2;
    var result2 = m1 * m2 * m3;
    return [result1, result2];
}

console.log(mul(2,2,4));  // [4, 16]
console.log(mul(2,2,4)[0]);  // 4
console.log(mul(2,2,4)[1]);  // 16

함수 프로퍼티

기본적으로 제공되는 함수 프로퍼티이다.


arguments

arguments 객체는 함수 호출 시에 전달된 인수들의 정보를 가지고 있는 유사 배열 객체이며, 함수 내부에서 지역변수처럼 사용된다.

function arg(x) {
    console.log(arguments);
}

console.log(arg());      // {}
console.log(arg(1));     // {'0' : 1}
console.log(arg(1, 2));  // {'0' : 1, '1' : 2}

다음과 같이 매개변수의 갯수가 정해져있지 않은 가변 인자 함수를 구현할 때 유용하다.

function sumAll() {
    // arguments.length : 함수 호출 시 입력된 매개변수의 갯수
    console.log(typeof(arguments) + ' : ' + arguments.length);
}

sumAll(1,2,3,4,5);  // object : 5
function sumAll() {
    var output = 0;
    for (var i=0; i<arguments.length; i++) {
        output += arguments[i];
    }
    console.log(output);
}

sumAll(1,2,3,4,5);  // 15

length

함수 정의 시 선언된 매개변수의 갯수를 의미한다.

function one(arg1) {
    console.log('one.length : ' + one.length);
}

one('var1', 'var2');    // one.length : 1

name

함수명을 의미한다. 익명함수의 경우 함수명이 없으므로 변수명을 값으로 한다.

var f1 = function sum(a, b) {
    return a + b;
}

var f2 = function(a, b) {
    return a + b;
}

function sum(a, b) {
    return a + b;
}

console.log(f1.name);   // sum
console.log(f2.name);   // f2
console.log(sum.name);  // sum

caller

자신을 호출한 함수를 의미한다.

function f() {
    f1();
}

function f1() {
    console.log("caller :" + f1.caller);
}

console.log(f());   // caller : function f() { f1(); }
console.log(f1());  // caller : null

내부함수

함수 내부에 정의된 함수를 내부함수라 하며 외부에서 접근할 수 없다.

function outter() {
    var title = 'coding everyday';

    function inner() {
        console.log(title);
    }
    inner();
}

outter();   // coding everyday
inner();    // inner is not defined

콜백 함수

명시적으로 호출하는 방식이 아닌 특정 시점/이벤트가 발생했을 때 호출되는 함수를 콜백함수라 한다. 또한, 특정 함수의 인자로 넘겨 코드 내부에서 호출되는 함수 역시 콜백 함수가 될 수 있다.

function call(a, b, callback) {
    var mul = a * b;
    callback(mul);  // callback 함수 실행
}

var callback = function (mul) {
    console.log(mul)
}

call(2, 3, callback);   // 6

callback 함수는 call 함수 내에서 호출되는 시점에 호출되는 콜백 함수이다.

function func() {
    function f() {
        console.log("함수 실행");
    }
    return f;
}

var myf = func();   // func() 함수의 리턴 값인 f 함수가 전달된다. 
myf();  // "함수 실행"

f 함수는 리턴된 후 myf() 호출 시점에 호출되는 콜백 함수이다.

function call(a, b) {
    var mul = a * b;
    return mul;
}

var callback = function (mul) {
    console.log(mul)
}

callback(call(2, 3));   // 6

위와 같이 만약 콜백 함수를 사용하지 않고 순차적으로 함수를 호출한다면 call 함수가 실행 완료된 후에야 callback 함수가 실행되므로 call 함수가 실행 완료될 때까지 기다려야 한다. 만약 웹사이트에서 call 함수의 실행이 길어진다면 웹사이트가 멈춰버릴 수 있다.

반응형

'Javascript' 카테고리의 다른 글

[Javascript] this  (1) 2023.10.31
[Javascript] 프로토타입  (2) 2022.12.30
[Javascript] 함수(1)  (3) 2022.07.15
[Javascript] 배열(2)  (5) 2022.07.06
[Javascript] 배열(1)  (3) 2022.06.29

댓글