ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JavaScript] function
    VScode/JavaScript 2022. 9. 8. 17:43

    -자바의 메서드와 같은 뜻의 문법요소임

    -반복되거나 단위로 구성될 명령을 하나의 이름으로 묶어놓고, 명령이 필요할 때 이름을 불러 실행하는 구조

    -보통 head 태그 안의 스크립트 영역에서 함수를 정의해놓고, body의 이벤트에 연결하여 실행시킴: 벼튼이 클릭되면 실행되는 자바 스크립트 함수의 정의

    -함수는 선언적 함수와 익명 함수가 있음

    -선언적 함수는 생성당시 부를 이름을 부여해서 만드는 함수를 의미하고,

    -익명 함수는 이름을 지정하지 않은 상태로 만들어서, 함수자체를 변수에 저장하여 변수이름으로 사용하곤 함

     

    선언적 함수

    -함수는 익명 함수이든 선언적 함수이든 head 영역의 script 태그 안에서 또는 body 영역의 script 태그 안에서 어디서든 호출 가능

    -move(); → head의 스크립트 영역에서 직접 호출

     

    익명함수

    -하나의 변수에 익명함수를 대입하고 필요할 때마다 변수이름으로 실행할 수 있다는 장점이 있음

    -이미 함수가 대입되어 있는 변수에 다른 함수를 대입하여 다른 함수가 실행되게 할 수도 있음

    -익명함수를 저장한 변수는 저장된 함수의 몸체를 대신하지만 변수에 괄호를 붙이면 함수가 실행되는 모드로 변경됨

    -함수의 정의영역 및 몸체를 변수에 저장하여 변수의 이름으로 호출하는 형태

    -변수는 일시적으로 하나의 함수만 저장할 수 있으며 변수의 이름으로 함수를 호출할 시 현재 저장되어 있는 함수가실행됨

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Function01.html</title>
        <script type="text/javascript">
            // 선언적 함수
            function move(){
                var output=Number(prompt('숫자 입력','숫자'));
                document.write(output);
            }
            // 익명함수
            var func1=function(){
                var output=Number(prompt('number: ','숫자'));
                document.write("<h2>"+output+"</h2>");
            }
            // func1();
            func1=function(){
                document.write("<h2>hi</h2>");
            }
            // func1();
            func2=function(){
                alert("hi");
            }
        </script>
    </head>
    <body onload="func2();">
        <!-- <script>
            func2();
        </script> -->
        <input type="button" value="func2 실행" onclick="func2();">
        <input type="button" value="move 실행" onclick="move();">
        <!-- head에 정의된 함수가 버튼 또는 윈도우 이벤트에 연결되어져서 
             실행될 수 있음. -->
    </body>
    </html>

     


    1. 함수의 전달인수-매개변수

    -자바스크립트 함수의 전달인수와 매개변수는 자바와 비슷하지만 매개변수의 자료형을 표시하지 않고 변수의 이름만 명시하고 사용함.

    -리턴값의 사용은 자바와 같음.

    function add(a,b){
        c=a+b;
        return c;
    }
    var result=add(10,20);
    document.write("<h2>10+20="+c+"</h2>");
    // -> 10+20=30 출력
     

    2. 매개변수의 사용

    -생성되어 있는 매개 변수보다 전달인수의 갯수가 많으면 해당 전달인수는 무시됨

    function f(x){
        return x*x;
    }
    result=f(5,3); // 두번째 전달인수는 무시함
    document.write("<h2>5*5="+result+"</h2>");
    // -> 5*5=25 출력
     

    3. 함수의 오버로딩 사용예

    -배열을 만들어주는 Array() 함수의 다양한 사용(오버로딩)

    -array() 함수는 기본적으로 매개변수에 아무것도 입력하지 않게 정의됨

    var array1=Array(); // 빈 배열을 만듦
    var array2=Array(10); // 매개변수만큼의 크기를 가지는 배열을 만듦
    var array3=Array(25,35,45,55); // 매개변수를 배열로 만듦.
    document.write("<h2>"+array1+"<br>"+array2+"<br>"+array3+"<br>"+"</h2>");
     
    빈배열. 매개변수(10)만큼의 크기를 가지는 배열(','의 갯수 9개). 매개변수의 배열

     

    4. arguments 변수 사용

    function sumAll(){
        document.write("<h1>"+typeof(arguments)+':'+arguments.length+"</h1>");
        var s="";
        var sum=0;
        for(var i in arguments){
            s=s+arguments[i]+" ";
            sum=sum+arguments[i];
        }
        document.write("<h1>arguments: "+s+"</h1>");
        document.write("<h1>sum: "+sum+"</h1>");
    }
    document.write("<br/>");
    sumAll(1,2,3,4,5);
    document.write("<br/>");
    sumAll(1,2,3,4,5,6,7,8,9);
    document.write("<br/>");
    // 입력 매개변수를 모두 더해 리턴하는 함수
     
    function addAll(){
        var sum=0;
        for(var i in arguments){
            sum=sum+arguments[i];
        }
        return sum;
    }
    result=addAll(1,2,3,4,5,6,7,8,9,10);
    document.write("<h1>배열의 합계: "+result+"</h1>");
    document.write("<br/>");
    addAll('minus',2,5,6,8,7,4);
    // -> '배열의 합계: 55' 출력 
     

    5. 리턴값이 익명함수인 경우

    function returnFunc(){
        // var f=function(){document.write("<h1>리턴된 함수의 출력</h1>");};
        // retunr f;
        return function(){document.write("<h1>리턴된 함수의 출력</h1>");};
    }
    var value=returnFunc(); // 함수의 리턴값(익명함수)을 변수에 저장함
    value(); // 변수이름옆에 괄호를 붙여서 리턴된 익명함수를 호출함. 
             // 화면에 "리턴된 함수의 출력"라고 출력함
    returnFunc()(); 
    // 함수 호출에 의해 리턴된 익명함수를 변수에 저장하지 않고 
    // () 안 붙여도 호출실행됨
    
    // -> '리턴된 함수의 출력'
          '리턴된 함수의 출력' 출력
     

    6. 익명함수를 함수의 전달인수로 전달하는 경우

    function varFunction(varFunc){
        for(var i=0; i<5; i++)
        varFunc();
    } 
    // 매개변수에 괄호를 붙여서 호출하는 것을 보니, 
    // 전달인수로 익명함수가 전달되나 봄
    var func=function(){document.write('<h1>hello</h1>');}
    varFunction(func);
    // varFunction(function(){document.write('<h1>hello</h1>');});
    
    // -> 'hello' 5번 출력
     

    7. 선언적 함수를 매개변수로 전달

    function justFunction(){
        document.write('<h1>hello</h1>');
    }
    varfunction(justFunction);
     

    8. 지역변수와 유효범위

    function test(name){
        var output='hello'+name+' !';
        return output;
    }
    // 위 함수 내의 output 변수는 지역 변수이므로, 
    // 함수를 벗어나면 없는 변수가 됨
    // document.write('<h1>'+output+'</h1>');
    // 실험결과 에러 메세지: output is not defined
    
    // 지역변수는 자신을 감싸고 있는 중괄호를 벗어나는 순간 소멸됨
    // 지역변수가 소멸되기 전에 그 값 리턴으로 전달받아 사용하면 
    // 지역변수값을 살려서 활용 가능함
    var s=test(' javascript');
    document.write('<h1>'+s+'</h1>');
    
    // -> hello javascript !
     

    9. 클로저(closure)

    -지역변수의 값을 살리고 활용하기 위해 리턴되는 함수의 리턴값으로 지정

    // 함수내의 지역변수를 외부에서 활용하는 방법
    function test2(name){
        var output='hello'+name+'..!';
        return function(){return output;}; 
        // 지역변수를 담은 익명함수가 리턴됨
    }
    var func1=test2(' javascript');
    var s=func1(); 
    // 리턴받은 함수를 호출해서 리턴 받은 값(test2의 output변수값)을 
    // s에 저장
    
    document.write('<h1>'+s+'</h1>');
    document.write('<h1>'+func1()+'</h1>');
    document.write('<h1>'+test2(' javascript')+'</h1>');
     
     

    함수의 재정의

    -함수 호출 전 마지막에 지정된 함수가 실행됨

     

    1. 익명함수의 재정의

    -익명함수는 변수의 익명함수가 저장되는 시점에 변수의 이름으로 함수가 정의되듯 실행 결과를 갖을 수 있게 만들어짐

    var func=function(){document.write('<h1>익명함수1</h1>');}
    func(); // 익명함수1
    var func=function(){document.write('<h1>익명함수2</h1>');}
    func(); // 익명함수2
     

     

    2. 선언적 함수의 재정의

    -최초 실행시 내부의 실행명령들의 내용을 읽기 전에 선언적 함수들을 먼저 읽어서 사용준비를 함

    -그 과정에 같은 이름의 함수가 있다면 나중에 정의된 함수가 그 이름의 함수로 결정됨

    -따라서 아래 코드의 세번의 move() 함수 호출 명령은 모두 'move() 함수3 호출' 내용을 출력함

    function move(){document.write('<h1>move() 함수1 호출.</h1>');}
    move();
    function move(){document.write('<h1>move() 함수2 호출.</h1>');}
    move();
    function move(){document.write('<h1>move() 함수3 호출.</h1>');}
    move();
     

    'VScode > JavaScript' 카테고리의 다른 글

    [JavaScript] vaildation, select tag, visibility, check  (0) 2022.09.08
    [JavaScript] Image  (0) 2022.09.08
    [JavaScript] BOM  (0) 2022.09.08
    [JavaScript] if, loop  (0) 2022.09.08
    [JavaScript] Basic  (0) 2022.09.08

    댓글

Designed by Tistory.