JavaScript函數參數與調用

來源:互聯網
上載者:User

標籤:

函數調用:

/*    1.    函數調用        */
      var temp = distance(0,1,2,3);
       
/*    2.    方法調用        */
      this.CName = "全域";
      var o = {
            CName:"o類",
            m:function(){
                  var self = this;
                  console.log(this == o);            //true
                  console.log(this.CName);         //o類
                  f();
                  function f(){
                          console.log(this == o);       
                         //false,此this綁定到全域對象
                          console.log(this.CName);   
                         //全域
                          console.log(self == o);       
                          //true
                          console.log(self.CName);   
                          //o類
                }
           }

      };
      o.m();
       

關於this:

一丶當它為一個對象上的方法的時候,this是當前這個對象。

二丶函數調用模式當函數並非一個對象的屬性時,那麼它被當做一個函數來調用。此模式下this綁定到全域對象。通過在對象內將this賦值給that,可以使函數模式下調用that來訪問指定對象。

函數的實參和形參:

/*    1.    可選形參        */
      function getPropertyNames(o,a){
            a = a||[];
            for(var property in o){
                a.push(property);
            }
            return a;   
      }
   
      var a = getPropertyNames(o);
      var b;
      getPropertyNames(p,b);             //    兩種調用
       
    /*    2.    可變長實參        */
      function max(){
            var max = 0;
            for(var i=0; i<arguments.length; i++){
                if(arguments[i]>max){
                    max=arguments[i];
                }
            return max;
            }
      }
       
      // 關於arguments
      function test_1(a,b,c,d){
            console.log(a,b,c,d);            //1,2,3,4
            for(var i=0; i<arguments.length; i++){
                arguments[i] = 0;
            }
            console.log(a,b,c,d);            //0,0,0,0
      }
      test_1(1,2,3,4);
      //改變arguments[i]時,對應傳進去的參數也會改變

caller&callee:

      //    caller:    正在執行函數的函數
      //    callee:    正在執行的函數
      function test_2(){
            console.log("test_2");
           
            function test_3(){
                  console.log("test_3");
                  function test_4(){
                        console.log("test_4");
                        //arguments.callee();  //這裡會迴圈調用test_4
                        //test_4.caller();//這裡回調到test_4調用者test_3
                }
                return test_4();
            }
            return test_3();
        }
        test_2();
       
        // 還可以用來做遞迴
        var plus = function(x){
            if(x<=1) return 1;
            return x*arguments.callee(x-1);
        }
        console.log(plus(5));

參數類型檢測:

isfinite();        //    是否有限數
isArrayLike();  //    是否是數組

函數的自訂屬性:

uniqueInterger.count = 0
//    給uniqueInterger函數定義了一個count屬性
function uniqueInterger(){
      //var a="myfunc";
     return uniqueInterger.count++;
}
    console.log(uniqueInterger());    //    0
    console.log(uniqueInterger());    //    1
    console.log(uniqueInterger());    //    2

作為命名空間的函數:

function myModule(){
     //    模組代碼
     //    這個模組使用的變數都是局部變數
     //    不會汙染全域命名空間
}
myModule()  //別忘記調用這個函數
       
//或者更簡單的
(function(){
     // 模組代碼
}());

JavaScript函數參數與調用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.