바냐파노
1k
2020-01-14 14:33:43
7
577

자바스크립트 typeof 를 함수에 쓰는 경우


회사업무 중 typeof 를 쓰다가 재밌는 걸 발견해서...
-----------------------
<!DOCTYPE html>
<html>

<body>

    <button onclick="activeAction()">테스트클릭</button>

    <script>
        function activeAction() {

            if (typeof test() == "undefined") {
                console.log("undefined");
            } else {
                console.log(typeof test());
                console.log("defined");
            }

        }

        function test() {
            console.log("들어옴");
            // 만일 string 타입이 반환될 때의 동작을 보고 싶으면 아래 주석해제
            //return "문자열"; 
        }
    </script>
</body>

</html>

-------------
위 문서는 복사해서 쓰셔도 됩니다.

버튼을 누르면 콘솔에 

들어옴
undefined
가 차례로 뜨네요. typeof를 함수에 쓰면 해당 함수를 실행시켜 리턴값을 받아온 후 해당 리턴값이 어떤 타입인지 평가해서 돌려주는 모양입니다. 자바스크립트 공부가 깊지 않아 왜 이렇게 동작하는지는 모르겠습니다만.. typeof 도 연산자이기 때문에 해당 함수의 리턴값을 돌려주는 식으로 동작해서가 아닌가 싶습니다.

예를 들어
var sum = test1() + test2()
console.log(sum);

function test1() {
return 1;
}

function test2() {
return 2;
}

이러면 콘솔에 3이 나오죠. 자바스크립트는 참 알다가도 모르겠습니다.
0
  • 답변 7

  • 세브라이드
    2k
    2020-01-14 14:58:36 작성 2020-01-14 14:59:51 수정됨

    typeof 뿐만 아니라 대부분의 경우 함수를 먼저 실행시킵니다.~.~

  • 아이원가습기
    429
    2020-01-14 16:00:46

    예상한대로 잘 동작하는데요. 이상한점이 뭔지 잘 이해가 안되네요.

    console.log(typeof test)를 원하시는건지??

  • 마니
    2k
    2020-01-14 16:02:13

    https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/연산자_우선순위


    해당 문서 보시면 도움 되실것같습니당

  • 바냐파노
    1k
    2020-01-14 16:04:28

    이상한 점이 있다는 건 아니구요, typeof function() 가 생긴 건 함수를 실행 안 시키고 그냥 타입만 돌려줄 것 같이 생겼는데 함수는 함수대로 실행이 되고 타입은 타입대로 반환을 해서 그 점이 좀 신기했습니다.

  • 아이원가습기
    429
    2020-01-14 16:06:56

    제가 해온 다른 대부분의 언어도 동일하게 동작하는걸로 알고있는데요. 혹시 아닌게있나요??

    하시려는게 typeof test()가 아니고 typeof test 로 보입니다

  • 바냐파노
    1k
    2020-01-14 16:10:53

    하려던 게 typeof test() 가 맞구요, 그냥 제가 생각을 좀 잘못해서 처음에 잘못 접근한 것 같습니다.

  • ondaa
    3k
    2020-01-14 17:02:23
    javascript 가 참 힘들죠 ㅋㅋㅋ
  • 로그인을 하시면 답변 을 등록할 수 있습니다.