學習內容來自:《JavaScript高級程序設計(第三版)》
正文:我們知道,在js中,函數實際上是一個對象,每個函數都是Function類型的實例,并且都與其他引用類型一樣具有屬性和方法。因此,函數名實際上是指向函數對象的指針,不與某個函數綁定。在常見的兩種定義方式(見下文)之外,還有一種定義的方式能更直觀的體現(xiàn)出這個概念:
var sum = new Function("num1", "num2", "return num1 + num2"); //不推薦
Function的構造函數可以接收任意數量的參數,但最后一個參數始終被看做函數體。這種方式有個缺點是,會導致解析兩次代碼,第一次是基礎的ES代碼解析,第二次是解析傳入構造函數中的字符串,這樣會導致性能的下降,在此寫出是幫助理解js中函數其實是對象這個概念。
?。ㄒ唬﹋s函數沒有重載的概念
說到重載的概念,我們來類比Java中的重載是怎么實現(xiàn)的:在Java中,方法是通過方法簽名來唯一標識一個方法。方法簽名包括:方法名、參數數量、參數順序和參數類型這幾個要素。因此兩個方法的方法名相同,而其他簽名要素不同,編譯器就會認為是兩個不同方法,從而可以存在同名的不同方法,以實現(xiàn)重載的概念。(引用:怎么深入理解js中為什么沒有重載呢--segmentfault 中manxisuo的回答)。