學(xué)習(xí)內(nèi)容來自:《JavaScript高級(jí)程序設(shè)計(jì)(第三版)》
正文:我們知道,在js中,函數(shù)實(shí)際上是一個(gè)對(duì)象,每個(gè)函數(shù)都是Function類型的實(shí)例,并且都與其他引用類型一樣具有屬性和方法。因此,函數(shù)名實(shí)際上是指向函數(shù)對(duì)象的指針,不與某個(gè)函數(shù)綁定。在常見的兩種定義方式(見下文)之外,還有一種定義的方式能更直觀的體現(xiàn)出這個(gè)概念:
var sum = new Function("num1", "num2", "return num1 + num2"); //不推薦
Function的構(gòu)造函數(shù)可以接收任意數(shù)量的參數(shù),但最后一個(gè)參數(shù)始終被看做函數(shù)體。這種方式有個(gè)缺點(diǎn)是,會(huì)導(dǎo)致解析兩次代碼,第一次是基礎(chǔ)的ES代碼解析,第二次是解析傳入構(gòu)造函數(shù)中的字符串,這樣會(huì)導(dǎo)致性能的下降,在此寫出是幫助理解js中函數(shù)其實(shí)是對(duì)象這個(gè)概念。
(一)js函數(shù)沒有重載的概念
說到重載的概念,我們來類比Java中的重載是怎么實(shí)現(xiàn)的:在Java中,方法是通過方法簽名來唯一標(biāo)識(shí)一個(gè)方法。方法簽名包括:方法名、參數(shù)數(shù)量、參數(shù)順序和參數(shù)類型這幾個(gè)要素。因此兩個(gè)方法的方法名相同,而其他簽名要素不同,編譯器就會(huì)認(rèn)為是兩個(gè)不同方法,從而可以存在同名的不同方法,以實(shí)現(xiàn)重載的概念。(引用:怎么深入理解js中為什么沒有重載呢--segmentfault 中manxisuo的回答)。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26