1. 程式人生 > >前端學習---閉包、遞迴

前端學習---閉包、遞迴


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>原型</title>
    <script>
     //閉包:能夠讀取其它函式內部變數的函式
     //JS 中每一個函式都是一個個體,子元素可以獲取父元素中的資訊,但是父元素不能直接獲取子元素中的資訊。
     //關鍵是否引用了外部變數。
    window.onload = function(){
        //方法一
      function a(){
          var n = 0;
          function add(){
              n++;
              console.log(n);
          };
          add();
      };
      a();
      //2
      function a1(){
          this.n=0;
          this.add=function(){
              this.n++;
              console.log(this.n);
          };
      };
      var a11 = new a1();
      a11.add();
      //3
      function a2(){
          var n=0;
          this.add=function(){
              n++;
              console.log(n);
          };
      };
      var a22 = new a2();
      a22.add();
      //4
      function a3(){
          var n=0;
         function add(){
              n++;
              console.log(n);
          };
          return add;
      };
      a3()();
      //5
     var a4 = (function a44(){
          var n=0;
         function add(){
              n++;
              console.log(n);
          };
          return add;
      })();//立即執行函式
      a4();




      //閉包傳參
      function f(x){
          var i = 0;
          return function(){
                 return x[i++];
          }
      };
      var abc = f(['a','b','c']);
      f();


      var f=( function (x){
          var i = 0;
          return function(){
                 return x[i++];
          }
      }(['a','b','c']));
      f();



      //遞迴  在函式執行過程中呼叫自己
      function f(n){
           if(n<=1){
               return 1;
           }else{
               return n*f(n-1);
           }
      };
      f(3);
      $(function(){
        //倒計時
        //方法一:setInterval
        var num = 10;
        setInterval(function(){
            if(num>0){
                num--;
            }else{
                //......
            }
        },1000);
        //方法二:遞迴
        function f(num){
           if(num>0){
            setTimeout(function(){
                num--;
                f(num);
            },1000);
           }else{

           }
        }
      });
    }
    </script>
</head>
<body>
    
</body>
</html>