ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript JQuery] 5장 함수
    GOhACK/웹 2016. 12. 24. 05:11

    5.1, 5.2 익명 함수와 선언적 함수

     NOTE 선언적 함수와 익명 함수의 순서


    코드 5-8

    <script>
        // declare a function called '함수'
        var 함수 = function() { alert('함수 A'); }
        function 함수() { alert('함수 B'); }
    
        // call '함수'' function
        함수();
    </script>   


    실행결과: '함수 A' 출력

     ∵ 선언적 함수가 먼저 생성 → 익명 함수 나중에 생성


    5.5 가변인자 함수

    가변인자 함수: 매개 변수를 선언된 형태와 다르게 사용했을 때도 매개 변수를 모두 이용하는 함수.


    코드 5-11 과 관련되는 내용

    배열은 객체다.


    5.9 함수를 리턴하는 함수

    5.10 클로저(closure)

    closure: 1)지연 변수를 남겨두는 현상, 2)내부의 변수들이 살아있는 함수 자체, 3)살아남은 지역 변수 자체

    코드5-28

    <script>
        // declare a function
        function test(name) {
            var output = 'Hello ' + name + ' .. !';
            return function() {
                alert(output);
            }
        };
    
        var test_1 = test('Web');
        var test_2 = test('Javascript');
    
        test_1();
        test_2();
    </script>


    test_1 이 변수로 선언되고 함수를 받았을 때, 함수를 호출하려면 test_1이 아닌 test_1()을 코드로 써줘야 한다.


    5.11 JavaScript 내장 함수

    5.11.1 타이머 함수


    코드5-30

    <script>
        // execute a function each one second
        var intervalID = setInterval(function() {
            alert('<p>' + new Date() + '</p>');
        }, 1000);
    
        // excute a function each ten second
        setTimeout(function() {
            // shut down the timer
            clearInterval(intervalID);
        }, 10000);
    </script>


    ● 1초 뒤에 실행된다고 해서 실제 1초가 지나갈 때마다 실행되는 것이 아니고, 

        처음1초 뒤에 실행되는 함수가 '확인'이 눌러지고 난 뒤 그 때부터 (아마 웹 상에) 시간이 흘러 그 시간 1초 뒤에 다시 실행된다.

    ● 만약 intervalID라는 변수를 설정하지 않고 clearInterval(id)에 넣을 수 있는 경우는 없을까? (내 견해로는 변수를 꼭 지정해야 될듯)

        clearInterval안에 setInterval() 함수를 그대로 넣는 건 아닌 것 같은데....



    ◎ JavaScript 실행 순서

    코드 5-31

    <script>
        alert('A');
        setTimeout(function() {
            alert('B');
        }, 0);
        alert('C');
    </script>

     실행순서: A → C → B

    > JavaScript 함수 중 웹 브라우저에 처리를 부탁하는 함수가 있다. 

      대표적으로 타이머 함수와 웹 요청은 웹 브라우저가 처리하고 처리가 완료되었다는 것을 JavaScript에게 알려주는 방식.

      --> 이런 함수는 현재 단위가 끝나기 전에는 실행되지 않는다.


    코드 5-34 closure를 활용한 해결

    <script>
        for (var i =0; i< 3; i++) {
            (function (closed_i) {
                setTimeout(function() {
                    alert(closed_i);
                }, 0);
            })(i);
        }
    </script>

     이 부분이 정확히 이해가 안됨



    5.11.3 코드 실행 함수

    eval(string) : string을 javascript code로 실행

    <script>
        //create strings
        var willEval = '';
        willEval += 'var number = 10;';
        willEval += 'alert(number);';
    
        // call eval() 
        eval(willEval);
    
        // use the variable in the functions which is called by eval()
        alert(number);
    </script>


    여기서 number 변수가 eval()에서 호출된 함수의 변수이기 때문에 사용될 수 있는데 이 기능 때문에 변수 이름이 중복되는 경우 충돌이 일어날 수 도 있을 것같다.


    5.11.4 숫자 확인 함수

    코드 5-41-1  : 코드 5-41 을 고친 함수!( 5-41에는 if의 조건문에 (value == Infinity)가 적혀 있다.

    <script>
        // declare a variable
        var value = 1 / 0;
    
        // display
        if (!isFinite(value)) {
            alert('Infinity입니다.');
        } else {
            alert('Infinity가 아닙니다. ');
        }
    </script>


    NaN은 스스로를 비교할 수 없다.

    => NaN을 확인할 때는 반드시 isNaN() 함수를 사용해야 한다.



    5.11.5 숫자 변환 함수

    함수 이름 

    설명 

    parseInt(string) 

    string을 정수로 바꾸어줍니다. 

    parseFloat(string) 

    string을 유리수로  


    이 함수들은 Number() 함수의 단점을 보완하기 위해 만들어진 함수다.

    "Number() 함수의 단점은 무엇일까?"

    -> "Number() 함수는 숫자로 바꿀 수 없는 문자가 있으면 문자열이 NaN으로 변환해버린다."


    반면, parseInt 와 parseFloat함수는 숫자로 변환할 수 있는 부분까지는 모두 숫자로 변환한다.

    이 두 함수의 주의할 점: 진수 (2진수, 8진수, 10진수, 16진수)







    'GOhACK > ' 카테고리의 다른 글

    [JavaScript jQuery] 7장 생성자 함수  (0) 2016.12.28
    [JavaScript JQuery] 6장 객체  (0) 2016.12.28
    [JavaScript JQuery] 4장 반복문  (0) 2016.12.24
    [JavaScript JQuery] 3장 조건문  (0) 2016.12.24

    댓글

Designed by Tistory.