萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> javascript 用函數語句和表達式定義函數的區別

javascript 用函數語句和表達式定義函數的區別

 本篇文章主要介紹了javascript 用函數語句和表達式定義函數的區別。需要的朋友可以過來參考下,希望對大家有所幫助

使用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');     };     代碼很簡單, 希望和我之前一樣沒有弄明白兩者區別的同學能有所收獲 。  
copyright © 萬盛學電腦網 all rights reserved