麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > JavaScript > 正文

javascript中arguments,callee,caller詳解

2019-11-20 10:23:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

arguments是什么?

arguments是函數(shù)調(diào)用時(shí),創(chuàng)建的一個(gè)類似的數(shù)組但又不是數(shù)組的對(duì)象,并且它存儲(chǔ)的是實(shí)際傳遞給函數(shù)的參數(shù),并不局限于函數(shù)聲明的參數(shù)列表哦。

尼瑪,什么意思?

寫個(gè)demo看看,代碼見下

<!DOCTYPE html>  <head>    <title>arguments</title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  </head>  <body>    <script>      function obj(){        //利用instanceof判斷arguments        console.log( 'arguments instanceof Array? ' + (arguments instanceof Array) );        console.log( 'arguments instanceof Object? ' + (arguments instanceof Object) );        console.log(arguments);      }      obj();    </script>  </body></html>

運(yùn)行該代碼,通過(guò)chrome調(diào)試器,可得下圖

我利用instanceof判斷arguments,從打印的效果看,arguments是一個(gè)對(duì)象。

然后展開打印出的arguments,可以從上圖得知,它里面包括了許多屬性,callee也在內(nèi)。

接下來(lái),我們修改上面的代碼,在調(diào)用obj函數(shù)時(shí),給它傳遞參數(shù),但obj函數(shù)是沒有參數(shù)的。

具體代碼見下

<!DOCTYPE html>  <head>    <title>arguments</title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  </head>  <body>    <script>      function obj(){        console.log( 'arguments instanceof Array? ' + (arguments instanceof Array) );        console.log( 'arguments instanceof Object? ' + (arguments instanceof Object) );        console.log(arguments);      }      //向obj傳遞參數(shù)      obj('monkey','love',24);    </script>  </body></html>

通過(guò)chrome調(diào)試器,可得下圖

大家可以看見,arguments包含了三個(gè)我們給它傳遞的參數(shù)”monkey”,”love”,24。

所以說(shuō),為什么arguments是存儲(chǔ)的實(shí)際傳遞給函數(shù)的參數(shù)呢,而不是函數(shù)聲明的參數(shù)。

callee是什么?

callee是arguments對(duì)象的一個(gè)成員,它的值為“正被執(zhí)行的Function對(duì)象”。

什么意思呢?

我們寫個(gè)demo,看看輸出結(jié)果就知道啦。

代碼和結(jié)果圖見下

<!DOCTYPE html>  <head>    <title>callee</title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  </head>  <body>    <script>      function obj(){        //利用callee        console.log(arguments.callee);      }      obj();    </script>  </body></html>

從上面的圖片可知,arguments.callee是指向參數(shù)arguments對(duì)象的函數(shù),在這里就是obj咯。

caller是什么?

caller是函數(shù)對(duì)象的一個(gè)屬性,該屬性保存著調(diào)用當(dāng)前函數(shù)的函數(shù)。

注意,是調(diào)用。不僅僅包含閉包哦。如果沒有父函數(shù),則為null。

還是老樣子,我們一直來(lái)寫個(gè)demo看看。

代碼如下:

<!DOCTYPE html>  <head>    <title>caller</title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  </head>  <body>    <script>      //child是parent內(nèi)的函數(shù),并在parent內(nèi)執(zhí)行child      function parent(){        function child(){          //這里child的父函數(shù)就是parent          console.log( child.caller );        }        child();      }      //parent1沒有被別人調(diào)用      function parent1(){        //這里parent1沒有父函數(shù)        console.log(parent1.caller);      }      //parent2調(diào)用了child2      function parent2(){        child2();      }      function child2(){        console.log(child2.caller);      }      /*執(zhí)行       parent里嵌套了child函數(shù)       parent1沒有嵌套函數(shù)       parent2調(diào)用了child2,child2不是嵌套在parent2里的函數(shù)      */      parent();      parent1();      parent2();    </script>  </body></html>

打開chrome調(diào)試器,可得下效果圖

結(jié)合代碼和上圖理解,這下理解了caller了么?

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产亚洲精品综合一区91 | 蜜桃精品视频在线观看 | 羞羞视频免费入口网站 | 免费香蕉成视频成人网 | 国产a级片电影 | 久久草在线视频国产 | 毛片在线不卡 | 精品一区久久久 | 毛片在线免费观看网址 | 99这里精品 | 久久美女色视频 | 国产艳妇av视国产精选av一区 | 91精品国 | 久久91亚洲精品久久91综合 | 中国av免费观看 | 久久噜噜噜精品国产亚洲综合 | 亚洲精品v天堂中文字幕 | 久久最新免费视频 | 亚洲人成中文字幕在线观看 | 偿还电影免费看 | 国产一级91 | 热99在线视频 | 久章草影院 | 深夜影院一级毛片 | 成人黄视频在线观看 | 一级免费在线视频 | 99在线在线视频免费视频观看 | 国产精品久久久久久久久久久久久久久 | 欧美黄色看 | 国产一级大片 | 在线播放一级片 | 毛片免费一区二区三区 | 99999久久久久久 | 日本综合久久 | 久草干 | 亚洲一区二区三区四区精品 | 在线2区| 欧美激情精品久久久久 | 精品一区二区三区在线视频 | 特级西西444www大精品视频免费看 | 国产精品免费观看视频 |