溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JS中為什么沒有函數(shù)重載

發(fā)布時(shí)間:2021-08-25 18:53:05 來(lái)源:億速云 閱讀:118 作者:chen 欄目:編程語(yǔ)言

這篇文章主要介紹“JS中為什么沒有函數(shù)重載”,在日常操作中,相信很多人在JS中為什么沒有函數(shù)重載問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”JS中為什么沒有函數(shù)重載”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

  函數(shù)重載是指在同一作用域內(nèi),可以有一組具有相同函數(shù)名,不同參數(shù)列表(參數(shù)個(gè)數(shù)、類型、順序)的函數(shù),這組函數(shù)被稱為重載函數(shù)。重載函數(shù)通常用來(lái)聲明一組功能相似的函數(shù),這樣做減少了函數(shù)名的數(shù)量,避免了名字空間的污染,對(duì)于程序的可讀性有很大的好處。

但是在JS如果不通過(guò)一些方法是無(wú)法實(shí)現(xiàn)重載的,可以從以下兩個(gè)角度去理解。

  方法簽名指的是函數(shù)的名稱加形參列表,并且通過(guò)函數(shù)的名稱或者形參列表都可以區(qū)分出是不同的函數(shù)。

  JS中通過(guò)形參是沒有辦法區(qū)分出不同的函數(shù)的,只能通過(guò)函數(shù)的名稱區(qū)分出不同的函數(shù)。

  上述實(shí)際上是一個(gè)函數(shù),后面的函數(shù)add會(huì)覆蓋前面的函數(shù),究其原因還是因?yàn)镴S是弱類型的語(yǔ)言,a和b實(shí)際上都是用var聲明的,等價(jià)于

  所以在JS中只能通過(guò)函數(shù)名稱來(lái)辨別是不是同一個(gè)函數(shù),形參是沒有用的。

  但是在強(qiáng)類型的語(yǔ)言中就是可以的,例如在c語(yǔ)言中,定義函數(shù)時(shí)形參必須要指定類型,向里面?zhèn)髦档臅r(shí)候也必須傳遞指定類型的值。函數(shù)名相同,形參名不同的函數(shù)也會(huì)被認(rèn)為是不同的函數(shù)。

  所以,在C語(yǔ)言這種強(qiáng)類型的語(yǔ)言中是可以實(shí)現(xiàn)函數(shù)重載的,JS這種弱類型的語(yǔ)言是不可以的。

函數(shù)指針

  另一中理解的角度是可以將函數(shù)名想象為指針,函數(shù)名中存放的是函數(shù)體存放的地址。

  最終add實(shí)際上指向的是第二個(gè)函數(shù),第一個(gè)函數(shù)被覆蓋了,所以最終調(diào)用add時(shí)調(diào)用的也是第二個(gè)函數(shù),并不能實(shí)現(xiàn)函數(shù)的重載。

到此,關(guān)于“JS中為什么沒有函數(shù)重載”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

js
AI