ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜ μ„ μ–Έ, 콜백, 호좜 μŠ€μΌ€μ€„λ§
    JavaScript 2020. 9. 7. 21:12

    🎯 μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜μ„ μ–Έ 방법, κ³ κΈ‰ν•¨μˆ˜, μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ₯Ό μ•Œμ•„λ³Έλ‹€.

     



     

     

    ν•¨μˆ˜μ˜ μ •μ˜ 방법 3가지


    선언적 μ •μ˜ 방법(μ΄λ¦„μžˆλŠ” ν•¨μˆ˜)

    ν•¨μˆ˜ 선언식은 μ½”λ“œ μ•ˆμ— λ…μžμ μΈ ꡬ문 ν˜•νƒœλ‘œ μ‘΄μž¬ν•˜λ©° ν•¨μˆ˜λͺ…을 λ°˜λ“œμ‹œ μ •μ˜ν•΄μ•Ό ν•œλ‹€.

    • 맀개 λ³€μˆ˜κ°€ μ—†λŠ” 경우

        function func1() {
            alert("javascript")
        }
    • 맀개 λ³€μˆ˜κ°€ μžˆλŠ” 경우

        function func2(name) {
            document.write(name + "λ‹˜ μ•ˆλ…•ν•˜μ„Έμš”.");
        }
    • 리턴 값이 μžˆλŠ” 경우

        function func3(value) {
            var ans;
            ans = value + 200;
            return ans;
        }

    ν•¨μˆ˜ 생성 μ‹œμ 

    func4();
    function func4(){
    ...
    }

    선언식 ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨ 컴파일 λ‹¨κ³„μ—μ„œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ μ •μ˜ 전에 호좜이 κ°€λŠ₯ν•˜λ‹€.

    λ”°λΌμ„œ func4 ν•¨μˆ˜λŠ” 슀크립트 λ‚΄ μ–΄λ””μ„œλ“  ν˜ΈμΆœν•  수 μžˆλ‹€.

     

    ν•¨μˆ˜λ¦¬ν„°λŸ΄ (읡λͺ…ν•¨μˆ˜)

    var λ³€μˆ˜λͺ… = function(args,args){
     statement;
        retrun ;
    }

    ν•¨μˆ˜ ν‘œν˜„μ‹μ€ μžλ°”μ— μ—†λŠ” νŠΉλ³„ν•œ κ°œλ…μ΄λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜λ₯Ό κ°’μœΌλ‘œ μ·¨κΈ‰ν•˜κΈ° λ•Œλ¬Έμ— λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλ‹€. 이 λ•Œ ν•¨μˆ˜λŠ” 이름이 μ—†κΈ° λ•Œλ¬Έμ— λ³€μˆ˜μ— ν• λ‹Ήν•˜κ²Œ 되면 ν•¨μˆ˜λͺ…이 λ³€μˆ˜λͺ…이 λœλ‹€. ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ λ‹¨κ³„μ—μ„œ μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜ μ •μ˜ 전에 ν˜ΈμΆœν•  수 μ—†λ‹€.

     

    Function μƒμ„±μž 이용

    var λ³€μˆ˜λͺ… = new Function("x","y","return x+y");

    λ‹€λ₯Έ 객체(μΈμŠ€ν„΄μŠ€)λ₯Ό 생성할 수 μžˆλŠ” μƒμ„±μž ν•¨μˆ˜μ΄λ‹€. FλŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•˜λ©° μ—¬λŸ¬ 개의 인자λ₯Ό 지정할 수 μžˆλ‹€. λ§ˆμ§€λ§‰ 인자 μœ„μΉ˜μ—λŠ” ν•¨μˆ˜μ—μ„œ 싀행될 μ½”λ“œλ₯Ό λͺ…μ‹œν•œλ‹€.

     

     

     

    λ§€κ°œλ³€μˆ˜μ™€ 인자


    ν•¨μˆ˜μ—μ„œ μ •μ˜λœ λ§€κ°œλ³€μˆ˜μ™€ ν˜ΈμΆœν•˜λŠ” 인자의 κ°œμˆ˜κ°€ μ„œλ‘œ 달라도 호좜이 κ°€λŠ₯ν•˜λ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ©”μ†Œλ“œ ν˜ΈμΆœμ‹œ νŒŒλΌλ―Έν„° 개수λ₯Ό μ²΄ν¬ν•˜μ§€ μ•ŠλŠ”λ‹€.

    function  one( x , y , z){
        for( var i = 0 ; i < arguments.length ; i++){
           console.log( arguments[i]);
        }
    }
    one(10,20);
    one(10,20,30);
    one(10,20,30,40);

    argumentsλŠ” ν•¨μˆ˜ 내에 μžλ™μœΌλ‘œ μƒμ„±λ˜λŠ” λ‚΄μž₯λ³€μˆ˜λ‹€. λ‚΄μž₯λ³€μˆ˜ argumentsλŠ” 호좜 μ‹œ λ„˜μ–΄μ˜€λŠ” νŒŒλΌλ―Έν„°λ₯Ό λ°°μ—΄λ‘œ κ΄€λ¦¬ν•œλ‹€. λ”°λΌμ„œ νŒŒλΌλ―Έν„° 개수λ₯Ό argument.length()둜 얻을 수 있으며 argument[index]λ₯Ό 톡해 λ°°μ—΄ μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€.

    function  makeFactorialFunc(){
        return function(x){
             if( x <= 1) return 1;
            return x * arguments.callee( x - 1 );//ν˜„μž¬ μ‹€ν–‰ν•¨μˆ˜
        }
    }
    
    var result  = makeFactorialFunc()(5);
    console.log( result );  // 120  ( 5 * 4 * 3 * 2 * 1 )

    arguments.callee() 속성은 ν˜„μž¬ μ‹€ν–‰λ˜κ³  μžˆλŠ” ν•¨μˆ˜λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. μž¬κ·€ ν˜ΈμΆœμ‹œ(ν•¨μˆ˜ aκ°€ 끝날 λ•Œ λ‹€μ‹œ aλ₯Ό ν˜ΈμΆœν•¨) μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

     

     

    ν•¨μˆ˜ μ—°μŠ΅

    var aaa = function(){
            console.log("aaa호좜");
            return 100;
        };
    
        var xxx1 = aaa;
        var xxx2 = aaa();
        console.log(xxx1());
        console.log(xxx1);
        console.log(xxx2);

    μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” κ΄„ν˜Έκ°€ μžˆμ–΄μ•Ό ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€. κ΄„ν˜Έλ₯Ό 뢙이지 μ•Šμ€ xxx1은 ν•¨μˆ˜ 자체λ₯Ό 좜λ ₯ν–ˆλ‹€.

     

    function ttt(){
            console.log("ttt호좜");
            return eee;
        }
        var eee = function() {
            console.log("eee호좜");
        };
        var k = ttt();
        k();

    이 ν•¨μˆ˜λŠ” 거꾸둜 따라간닀. kλ³€μˆ˜λ₯Ό ν•¨μˆ˜λ‘œ ν˜ΈμΆœν•˜κ³  k에 λ‹΄κ²¨μžˆλŠ” tttν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  ttt ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€. 리턴을 eee둜 ν•˜κΈ°λ•Œλ¬Έμ— eee에 λ‹΄κ²¨μžˆλŠ” 읡λͺ…ν•¨μˆ˜λ„ μ‹€ν–‰λ˜κ³  ν•¨μˆ˜λ₯Ό μ’…λ£Œν•œλ‹€.

     

    function kkk(x){
            console.log("kkk호좜", x);
            x();
        }
    
        kkk(function(){
            console.log("ppp 호좜");
        });

    ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ 인자둜 ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•œλ‹€. kkk ν•¨μˆ˜λŠ” νŒŒλΌλ―Έν„°μ— 읡λͺ…ν•¨μˆ˜λ₯Ό 전달받고 μ½˜μ†”μ— 메세지와 읡λͺ…ν•¨μˆ˜ 전체λ₯Ό 좜λ ₯ν•œλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ 읡λͺ…ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ„œ μ½˜μ†”μ— ppp 메세지가 좜λ ₯λœλ‹€.

     

    μ¦‰μ‹œμ‹€ν–‰ν•¨μˆ˜

    (function (){
            console.log("μ¦‰μ‹œν˜ΈμΆœν•¨μˆ˜");
        })();

    ν•¨μˆ˜ 전체λ₯Ό κ΄„ν˜Έλ‘œ 감싼 λ’€ λ°”λ‘œ ν˜ΈμΆœκ΄„ν˜Έλ₯Ό 뢙인닀.

     

     

     

    κ³ κΈ‰ν•¨μˆ˜ ν˜•νƒœ


    μ½œλ°±ν•¨μˆ˜

    function call(info){
        info();
     }
    
     var callback = function(){
         console.log("callback");
     }
    
     call(callback)

    ν•¨μˆ˜λ₯Ό ν•¨μˆ˜μ˜ 인자둜 μ „λ‹¬ν•˜κ³  ν•„μš”ν•  λ•Œ 인자둜 μ „λ‹¬ν•œ ν•¨μˆ˜λ₯Ό λ‚˜μ€‘μ— ν˜ΈμΆœν•˜λŠ” 것을 μ½œλ°±ν•¨μˆ˜λΌκ³  λ§ν•œλ‹€. μ‹€ν–‰ν•  ν•¨μˆ˜(callback())λ₯Ό λ§Œλ“€μ–΄λ†“κ³  ν•„μš”ν•  λ•Œ 트리거 ν•¨μˆ˜(call())μ—κ²Œ 인자둜 μ „λ‹¬ν•΄μ„œ ν˜ΈμΆœν•œλ‹€.

     

    μ€‘μ²©ν•¨μˆ˜

    var a= function(arg) {
        var b= function(n) {
            return n*100;
        }
        return b(arg);
    }
    
    //μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό 방법
    var result = a(2);
    console.log(result);

    νŠΉμ • ν•¨μˆ˜μ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯일 경우 내뢀에 μ •μ˜ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. a 내뢀에 μžˆλŠ” b ν•¨μˆ˜λŠ” μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•  수 μ—†λ‹€. μ™ΈλΆ€μ—μ„œ μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„  a ν•¨μˆ˜λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. λ¨Όμ € a ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  인자λ₯Ό μ „λ‹¬ν•œλ‹€. a ν•¨μˆ˜λŠ” λ¦¬ν„΄κ²°κ³Όλ‘œ bν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  λ°›μ•„μ˜¨ 인자λ₯Ό 같이 μ „λ‹¬ν•œλ‹€. 호좜된 b ν•¨μˆ˜λŠ” λ°›μ•„μ˜¨ μΈμžμ— 100을 κ³±ν•œ 값을 λ¦¬ν„΄ν•œλ‹€. 이 κ²°κ³Ό 200은 result λ³€μˆ˜μ— λ‹΄κΈ΄λ‹€.

     

    var k = function(){
        var d = 10;
        var k2 = function(){
            return  d * 2;
        }
       return k2();
    }
    
    console.log("k() 호좜 : " + k() ); //20

    μ€‘μ²©ν•¨μˆ˜λŠ” 내뢀에 μ •μ˜λœ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλ‹€. kν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” d λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†μ§€λ§Œ k2 ν•¨μˆ˜λŠ” μ ‘κ·Όν•  수 μžˆλ‹€. 객체지ν–₯의 은닉화 기법을 μ μš©ν•  수 μžˆλ‹€.

     

     

     

    μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜


    • alert ν•¨μˆ˜ : 경고창을 화면에 λ„μšΈ λ•Œ μ‚¬μš©ν•œλ‹€.

      alert('hi!');

    • setTimeout ν•¨μˆ˜ : 일정 μ‹œκ°„μ— ν•¨μˆ˜λ₯Ό 단 ν•œ 번 μ‹€ν–‰ν•œλ‹€.

        setTimeout(function(){
            alert("bbb");
        },3000);

      3초 후에 ν•¨μˆ˜λ₯Ό ν•œ 번 μ‹€ν–‰ν•œλ‹€.

    • setInterval ν•¨μˆ˜ : μΌμ •μ‹œκ°„λ§ˆλ‹€ λ°˜λ³΅ν•΄μ„œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€.

        var kkk= setInterval(function(){
               console.log("setInterval")
           },3000);
      
        setTimeout(function(){//10μ΄ˆλ’€μ— interval μ‚­μ œ 
            clearInterval(kkk);
        },10000);
      

      kkk ν•¨μˆ˜λŠ” 3μ΄ˆλ§ˆλ‹€ λ°˜λ³΅ν•΄μ„œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€. clearInterval()ν•¨μˆ˜λŠ” λ°˜λ³΅ν•¨μˆ˜λ₯Ό μ§€μ›Œμ€€λ‹€.

    • parseInt, parseFloat ν•¨μˆ˜ : λ¬Έμžμ—΄μ„ 숫자둜, μ‹€μˆ˜λ‘œ λ³€ν™˜ν•œλ‹€.

      var num = parseInt("123");

     

     

     

    😜 NEXT : μžλ°”μŠ€ν¬λ¦½νŠΈ built-in 객체 κ³΅λΆ€ν•˜κΈ°

    λ°˜μ‘ν˜•

    λŒ“κΈ€

κ°œλ°œκ³΅λΆ€