js函數運算式

來源:互聯網
上載者:User

標籤:style   blog   color   使用   strong   io   

 

定義函數的方式

定義函數運算式的方法有兩種,一種是函式宣告,另一種是函數運算式.

函式宣告的方式,關於函式宣告的方式,它的一個重要的特性就是函式宣告提升(function declaration hoisting),意思是在執行代碼之前會先讀取函式宣告。這就意味著可以把函式宣告放在調用它的語句後面,like this

 

1             sayHi();//聲明函數(function declaration hoisting)2             function sayHi(){3                 alert("Hi!");4             }    

 

 函數運算式有多種表達方式,下面是最常見的一種

 

 var func = function(agr1,arg2){//建立匿名函數      alert(arg1 + ‘  ‘ + arg2);//函數體  }    

 

函數運算式與其他運算式一樣,使用前必須賦值。比如下面的代碼就會導致錯誤。

   var condition = true;    //never do this!  不同的瀏覽器會做出不同的行為 不要這麼做!    if(condition){        function sayHi(){            alert("Hi!");        }    } else {        function sayHi(){            alert("Yo!");        }    }    sayHi();

 

函數可以賦值給變數,自然也可以當作傳回值返回。

遞迴

就像每一門語言一樣,任何方法或者函數解決問題的思路有遞迴和枚舉兩種基本思路,但是js中的遞迴還是有個小陷阱的,這裡需要注意。看看下面的代碼吧,只是一個簡單的求階乘的函數。

        //求階乘,看起來並沒有問題        function factorial(num) {            if (num <= 1) {                return 1;            } else {                return num * factorial(num - 1);            }        }        var anotherFactorial = factorial;        factorial = null;        alert(anotherFactorial(4));  //error!

 

這裡隱藏的問題就是,如果先用一個變數anotherFactorial指向factorial函數對象(函數對象哦),再將fatorial置空(相當於window對象的factorial屬性=null),再執行anotherFactorial()時,會發現調用fatorial

時會發生錯誤的,原因是null不是函數。那麼為了避免這樣的問題我們可以這樣改進這個函數,使用arguments.callee可以解決這個問題。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ss

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.