我們知道,在js中,函數實際上是一個對象,每個函數都是function函數類型的實例,并且都與其他引用類型一樣具有屬性和方法。因此,函數名實際上是指向函數對象的指針,不與某個函數綁定。在常見的兩種定義方式(見下文)之外,還有一種定義的方式能更直觀的體現出這個概念。
function函數——function函數的載重概念
varsum=newFunction(“num1″,”num2″,”returnnum1+num2”);//不推薦
Function的構造函數可以接收任意數量的參數,但最后一個參數始終被看做函數體。這種方式有個缺點是,會導致解析兩次代碼,第一次是基礎的ES代碼解析,第二次是解析傳入構造函數中的字符串,這樣會導致性能的下降,在此寫出是幫助理解js中函數其實是對象這個概念。
說到重載的概念,我們來類比Java中的重載是怎么實現的:在Java中,方法是通過方法簽名來唯一標識一個方法。方法簽名包括:方法名、參數數量、參數順序和參數類型這幾個要素。因此兩個方法的方法名相同,而其他簽名要素不同,編譯器就會認為是兩個不同方法,從而可以存在同名的不同方法,以實現重載的概念。(引用:怎么深入理解js中為什么沒有重載呢–segmentfault中manxisuo的回答)。
而上面我們說過,js中的函數名實際上是指向函數對象的指針,因此函數名可以說是一個函數的唯一標識,跟參數列表并沒有關系,因此并不會出現同名的兩個函數(因為一個指針同時只能指向一個對象)從而不存在重載的概念。
Javascriptfunction關鍵字
在腳本語言javascript中,function是定義一個函數的關鍵字,通常形態是
function函數名(參數1[參數2])
{
函數體
return返回值
}
其中也可以不返回值。
Function函數是包含在Function和EndFunction語句之間的一組VBScript語句。Function函數與Sub過程類似。但Function函數可以有返回值。可以使用參數。如果Function函數沒有任何參數,則Function語句必須要包含空括號。Function函數通過函數名返回一個值。返回值的數據類型是Variant.
在代碼開始執行之前,解析器就已經通過一個名為函數聲明提升的過程,讀取并將函數聲明添加到執行環境中。簡單來說,解析器會先將函數聲明放在源代碼樹的頂部。如果大家還想了解更多與之有關的信息,歡迎關注我們優詞網的官網。