首頁  >  文章  >  web前端  >  javascript 以函數語句和表達式定義函數的差異詳解_javascript技巧

javascript 以函數語句和表達式定義函數的差異詳解_javascript技巧

WBOY
WBOY原創
2016-05-16 17:05:281109瀏覽

使用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

 d

    // 函數語句
    function fn(str)

    {

        console.log(str);
>;
    // 表達式定義
    var fnx=function(str)
    {

        console.log(str. from;程式碼很簡單, 希望和我之前一樣沒有弄清楚兩者差異的同學能有所收穫。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn