定義函數的方式有兩種:一種是函數聲明,一種是函數 表達式
function functionName(arg0,arg1,arg2){ //函數體 }
首先是function關鍵字,然后是函數的名字,這就是指定函數名的方式。在Firefox,Safari,Chrome和Opera都給函數定義了一個非標准的name屬性,通過和這個屬性可以訪問到給函數指定的名字。這個屬性的值永遠等於跟着function關鍵字后面的標記符
//只有在Firefox,Safari,Chrome和Opera有效
alert(functionName.name) // 'function'
第二種函數表達式 常見的形式為
var functionName=function(arg0,arg1,arg2){ //函數體 }
MDN上函數表達式的語法是
參數:
name:函數名稱。可被省略,此種情況下的函數是匿名函數。函數名稱只是函數體中的一個本地變量
paramN:被傳遞給函數的一個參數名稱。一個函數至多擁有255個參數
statements 構成函數體的語句
函數表達式非常類似於函數聲明,並且兩者擁有幾乎相同的語法。函數表達式與函數聲明最主要區別是函數名稱,在函數表達式中可省略它,從而創建匿名函數。一個函數表達式可以被用作一個IIFE(Immediately Invoked Function Expression,即時調用的函數表達式),它一旦定義就運行。
var p = function fn(){ console.log(fn) console.log('1') } p()
經過上面定義的總結,所以上例,其實就是一個函數表達式,而不是一個函數聲明再賦值給變量。