1先誉、在JavaScript中,arguments對象是比較特別的一個(gè)對象的烁,實(shí)際上是當(dāng)前函數(shù)的一個(gè)內(nèi)置屬性褐耳。arguments非常類似Array,但實(shí)際上又不是一個(gè)Array實(shí)例渴庆×迓可以通過如下代碼得以證實(shí)(當(dāng)然,實(shí)際上襟雷,在函數(shù)funcArg中刃滓,調(diào)用arguments是不必要寫成funcArg.arguments,直接寫arguments即可)耸弄。
2咧虎、arguments對象的長度是由實(shí)參個(gè)數(shù)而不是形參個(gè)數(shù)決定的。形參是函數(shù)內(nèi)部重新開辟內(nèi)存空間存儲(chǔ)的變量计呈,但是其與arguments對象內(nèi)存空間并不重疊砰诵。對于arguments和值都存在的情況下,兩者值是同步的震叮,但是針對其中一個(gè)無值的情況下胧砰,對于此無值的情形值不會(huì)得以同步鳍鸵。如下代碼可以得以驗(yàn)證苇瓣。
3、由JavaScript中函數(shù)的聲明和調(diào)用特性偿乖,可以看出 ??JavaScript中函數(shù)是不能重載的击罪。
根據(jù)其他語言中重載的依據(jù):"函數(shù)返回值不同或形參個(gè)數(shù)不同",我們可以得出上述結(jié)論:
第一:Javascript函數(shù)的聲明是沒有返回值類型這一說法的贪薪;
第二:JavaScript中形參的個(gè)數(shù)嚴(yán)格意義上來講只是為了方便在函數(shù)中的變量操作媳禁,實(shí)際上實(shí)參已經(jīng)存儲(chǔ)在arguments對象中了。
另外画切,從JavaScript函數(shù)本身深入理解為什么JavaScript中函數(shù)是不能重載的:在JavaScript中竣稽,函數(shù)其實(shí)也是對象,函數(shù)名是關(guān)于函數(shù)的引用霍弹,或者說函數(shù)名本身就是變量毫别。對于如下所示的函數(shù)聲明與函數(shù)表達(dá)式,其實(shí)含以上是一樣的(?在不考慮函數(shù)聲明與函數(shù)表達(dá)式區(qū)別的前提下?)典格,非常有利于我們理解JavaScript中函數(shù)是不能重載的這一特性岛宦。
4、arguments對象中有一個(gè)非常有用的屬性:callee耍缴。arguments.callee返回此arguments對象所在的當(dāng)前函數(shù)引用砾肺。在使用函數(shù)遞歸調(diào)用時(shí)推薦使用arguments.callee代替函數(shù)名本身挽霉。