Javascript中對arguments的一點點理解

Javascript中的arguments對象

實參和形參的同步性

實參是存儲在arguments對象中拆火,arguments是一個類數(shù)組伏社,arguments對象的長度是由實參個數(shù)而不是形參個數(shù)決定的。形參是函數(shù)內(nèi)部重新開辟內(nèi)存空間存儲的變量,但是其與arguments對象內(nèi)存空間并不重疊浇垦。對于arguments和值都存在的情況下蹦锋,兩者值是同步的兆沙,但是針對其中一個無值的情況下,對于此無值的情形值不會得以同步莉掂。下面的截圖可以驗證


圖1



圖2

形參a與實參arguments[0]是對應(yīng)關(guān)系葛圃,改動其中一個,另外一個也會跟著改變憎妙。但是對于形參c和實參arguments[2]而言库正,因為實參有“1”、“2”尚氛,arguments[2]并沒有賦值诀诊,所以arguments[2]為undefined,在函數(shù)中將arguments[2]對應(yīng)的形參c賦值為2012后阅嘶,arguments[2]仍為undefined属瓣。

arguments的callee屬性

callee屬性在函數(shù)的遞歸當中較常出現(xiàn),下面對比一下遞歸中使用callee和不使用callee的區(qū)別

不使用callee的遞歸寫法:

以下代碼可導(dǎo)致出錯:

圖3

var tempCount = count;

count = null;

alert(tempCount(3)); //出錯

由于tempCount和count本質(zhì)只是指向函數(shù)的指針讯柔,在執(zhí)行tempCount(3)時抡蛙,函數(shù)體內(nèi)會調(diào)用count指向的函數(shù),而count已經(jīng)被置為null魂迄,count不指向函數(shù)了粗截,所以出錯。

用arguments.callee可解決問題捣炬,這是一個指向正在執(zhí)行的函數(shù)的指針熊昌。

使用callee的遞歸寫法:


圖4

var tempCount = count;

count = null;

alert(tempCount(4)); //結(jié)果為24.

補充:1.函數(shù)沒有重載,只有覆蓋湿酸,2.事件函數(shù)婿屹,有默認參數(shù)event

在js中有兩個原因?qū)е聸]有函數(shù)重載,一:函數(shù)沒有返回值類型這一說法推溃,二:形參只是用來在函數(shù)中方便調(diào)用的昂利,編譯并不檢查傳參,實參是存儲在arguments對象中。對此舉個例:


圖5


圖6

由此可以看出蜂奸,調(diào)用的始終是后面的申明的函數(shù)犁苏。

對于事件函數(shù)的默認參數(shù)event問題,貼一段代碼:


圖7

對應(yīng)的打永┧:

圖8

其實有些人對上面的函數(shù)開始會有這樣的第一反應(yīng):arguments.length = 2, arguments里面是foo和1000围详,但是,仔細觀察一下碌奉,發(fā)現(xiàn)arguments是返回的匿名函數(shù)的arguments短曾,而不是debounce的arguments。匿名函數(shù)并沒有任何形參也沒有明顯傳遞實參赐劣,但是打印出的arguments.length = 1,并且打印出的這個實參是event嫉拐。這是因為debounce函數(shù)執(zhí)行后,返回的匿名函數(shù)作為window的mousemove函數(shù)魁兼,事件函數(shù)里面會有一個默認的參數(shù)event婉徘,這是事件函數(shù)特有的情況,但是如果是一個普通的匿名函數(shù)咐汞,就不會有默認的event參數(shù)盖呼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市化撕,隨后出現(xiàn)的幾起案子几晤,更是在濱河造成了極大的恐慌,老刑警劉巖植阴,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蟹瘾,死亡現(xiàn)場離奇詭異,居然都是意外死亡掠手,警方通過查閱死者的電腦和手機憾朴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喷鸽,“玉大人众雷,你說我怎么就攤上這事∽鲎#” “怎么了砾省?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長混槐。 經(jīng)常有香客問我纯蛾,道長,這世上最難降的妖魔是什么纵隔? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上捌刮,老公的妹妹穿的比我還像新娘碰煌。我一直安慰自己,他們只是感情好绅作,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布芦圾。 她就那樣靜靜地躺著,像睡著了一般俄认。 火紅的嫁衣襯著肌膚如雪个少。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天眯杏,我揣著相機與錄音夜焦,去河邊找鬼。 笑死岂贩,一個胖子當著我的面吹牛茫经,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萎津,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼卸伞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锉屈?” 一聲冷哼從身側(cè)響起荤傲,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颈渊,沒想到半個月后遂黍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡儡炼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年妓湘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乌询。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡榜贴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妹田,到底是詐尸還是另有隱情唬党,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布鬼佣,位于F島的核電站驶拱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晶衷。R本人自食惡果不足惜蓝纲,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一阴孟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧税迷,春花似錦永丝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至毕泌,卻和暖如春喝检,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撼泛。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工挠说, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坎弯。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓纺涤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抠忘。 傳聞我的和親對象是個殘疾皇子撩炊,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容