shiro21 2022. 6. 3. 12:06
반응형

내부함수

내부함수는 여러 개발자들과 프로그램을 개발할 때 충돌이 발생하는 것을 막는 방법입니다.

 

내부함수 형태

function <외부함수>() {
    function <내부함수1>() { <코드> }
    function <내부함수2>() { <코드> }

    <코드>
}

 

피타고라스의 정리 구현하기

// 제곱을 구하는 함수
function square(x) {
    return x * x;
}

// 피타고라스 함수
function pytha(width, height) {
    return Math.sqrt(square(width) + square(height));
}

alert(pytha(3, 4)); // 5

밑변과 높이를 매개변수로 받아 빗변의 길이를 리턴합니다.

 

이름 충돌 예

// 제곱을 구하는 함수
function square(x) {
    return x * x;
}

// 피타고라스 함수
function pytha(width, height) {
    return Math.sqrt(square(width) + square(height));
}

alert(pytha(3, 4)); // 0

// 삼각형이 직각인지 확인하는 함수
function square(width, height, hypotenuse) {
    if(width * width + height + height == hypotenuse * hypotenuse) {
        return true;
    } else {
        return false;
    }
}

위에서 만든 square()함수가 아래 square()함수에 덮어씌워지게 되면서 아래 square()를 사용하게 됩니다.

이를 방지하기 위해 다른 이름을 사용할 수도 있지만, 가변 인자 함수로 같은 이름이어도 다른 기능을 수행하게 하여 충돌 예방을 할 수 있습니다.

 

내부함수 사용 예

// 피타고라스 함수
function pytha(width, height) {
    // 제곱을 구하는 함수 (내부함수)
    function square(x) {
        return x * x;
    }
    return Math.sqrt(square(width) + square(height));
}

alert(pytha(3, 4)); // 5

// 삼각형이 직각인지 확인하는 함수
function square(width, height, hypotenuse) {
    if(width * width + height + height == hypotenuse * hypotenuse) {
        return true;
    } else {
        return false;
    }
}

이런식으로 내부함수를 사용하면 함수의 이름충돌을 예방할 수 있습니다. 하지만 반대로 내부함수를 외부에선 사용할 수 없다는 것을 알아두어야 합니다.

:: 내부함수는 내부함수를 포함한 외부함수에서만 사용이 가능합니다. ( 내부함수를 외부에서 개별적으로 사용이 불가능함 )

 

 

반응형