javascript 用函數語句和運算式定義函數的區別

來源:互聯網
上載者:User

  使用javascript多年,寫過無數函數,今天卻才真正弄明白兩種函數定義的區別,真是悲劇,寫下這個隨筆, 以時刻提醒自己要打好基礎 , 一大把年紀了, 不能繼續懵懵懂懂了。

  通常我們會看到以下兩種定義函數的方式: 

// 函數語句function fn(str){  console.log(str);};// 運算式定義var fnx=function(str){  console.log(str+ ' from fnx');};

以前都是憑藉自己手指的感覺隨心所欲使用兩者 -_- || ,今天看了js基礎, 總算是解決了心中對他們的困惑:

兩種方式都建立了新的函數對象, 但函式宣告語句的函數名是一個變數名, 變數指向函數對象, 和通過var聲明變數一樣,函數定義語句中的函數被顯示地提前到了指令碼或函數的頂部, 因此它們在整個指令碼和函數內都是可見的,但是使用var 運算式定義函數, 只有變數聲明提前了,變數初始化代碼仍然在原來的位置, 用函數語句建立的函數, 函數名稱和函數體均被提前,所以我們可以在聲明它之前就使用它。 

 代碼例子如下:

    console.log(typeof(fn)); // function    fn('abc'); // abc    console.log(typeof(fnx)); // undefined    if(fnx)        fnx('abc');  // will not execute    else        console.log('fnx is undefined'); // fnx is undefined    // 函數語句    function fn(str)    {        console.log(str);    };    // 運算式定義    var fnx=function(str)    {        console.log(str+ ' from fnx');    };

代碼很簡單, 希望和我之前一樣沒有弄明白兩者區別的同學能有所收穫 。 

 

 

相關文章

聯繫我們

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