站长资源网络编程

javascript中arguments,callee,caller详解

整理:jimmy2026/8/4浏览2
简介arguments是什么?arguments是函数调用时,创建的一个类似的数组但又不是数组的对象,并且它存储的是实际传递给函数的参数,并不局限于函数声明的参数列表哦。尼玛,什么意思?写个demo看看,代码见下arguments</titl</div> <div class="news_infos"><div id="MyContent"><p><strong>arguments是什么?</strong></p> <p>arguments是函数调用时,创建的一个类似的数组但又不是数组的对象,并且它存储的是实际传递给函数的参数,并不局限于函数声明的参数列表哦。</p> <p>尼玛,什么意思?</p> <p>写个demo看看,代码见下</p> <div class="htmlcode"> <pre class="brush:js;"> <!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"" src="/UploadFiles/2021-04-02/201603161150526.png"></p> <p>我利用instanceof判断arguments,从打印的效果看,arguments是一个对象。</p> <p>然后展开打印出的arguments,可以从上图得知,它里面包括了许多属性,callee也在内。</p> <p>接下来,我们修改上面的代码,在调用obj函数时,给它传递参数,但obj函数是没有参数的。</p> <p>具体代码见下</p> <div class="htmlcode"> <pre class="brush:js;"> <!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"" src="/UploadFiles/2021-04-02/201603161150537.png"></p> <p>大家可以看见,arguments包含了三个我们给它传递的参数”monkey”,”love”,24。</p> <p>所以说,为什么arguments是存储的实际传递给函数的参数呢,而不是函数声明的参数。</p> <p><strong>callee是什么?</strong></p> <p>callee是arguments对象的一个成员,它的值为“正被执行的Function对象”。</p> <p>什么意思呢?</p> <p>我们写个demo,看看输出结果就知道啦。</p> <p>代码和结果图见下</p> <div class="htmlcode"> <pre class="brush:js;"> <!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> </pre> </div> <p>从上面的图片可知,arguments.callee是指向参数arguments对象的函数,在这里就是obj咯。</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/201603161150538.png');"><img src="/UploadFiles/2021-04-02/201603161150538.png" alt="javascript中arguments,callee,caller详解" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p><strong>caller是什么?</strong></p> <p>caller是函数对象的一个属性,该属性保存着调用当前函数的函数。</p> <p>注意,是调用。不仅仅包含闭包哦。如果没有父函数,则为null。</p> <p>还是老样子,我们一直来写个demo看看。</p> <p>代码如下:</p> <div class="htmlcode"> <pre class="brush:js;"> <!DOCTYPE html> <head> <title>caller</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> //child是parent内的函数,并在parent内执行child function parent(){ function child(){ //这里child的父函数就是parent console.log( child.caller ); } child(); } //parent1没有被别人调用 function parent1(){ //这里parent1没有父函数 console.log(parent1.caller); } //parent2调用了child2 function parent2(){ child2(); } function child2(){ console.log(child2.caller); } /*执行 parent里嵌套了child函数 parent1没有嵌套函数 parent2调用了child2,child2不是嵌套在parent2里的函数 */ parent(); parent1(); parent2(); </script> </body> </html> </pre> </div> <p>打开chrome调试器,可得下效果图</p> <p><a href="javascript:;" onclick="showimg('/UploadFiles/2021-04-02/201603161150539.png');"><img src="/UploadFiles/2021-04-02/201603161150539.png" alt="javascript中arguments,callee,caller详解" onmousewheel="return bbimg(this)" onload="javascript:resizepic(this)" border="0"/></a></p> <p>结合代码和上图理解,这下理解了caller了么?</p></div> </div> </div> <div class="share"> </div> <div class="nextinfo"> <p>上一篇:<a href="/3g/1/109265.html" title="js实现内容显示并使用json传输数据">js实现内容显示并使用json传输数据</a></p> <p>下一篇:<a href="/3g/1/109267.html" title="Bootstrap每天必学之滚动监听">Bootstrap每天必学之滚动监听</a></p> </div> <div class="otherlink"> <h2>最新资源</h2> <ul> <li><a href="/3g/1/623703.html" title="群星《奔赴!万人现场 第2期》[FLAC/分轨]">群星《奔赴!万人现场 第2期》[FLAC/分轨]</a></li> <li><a href="/3g/1/623702.html" title="群星《奇妙浪一夏 (上海迪士尼度假区音乐">群星《奇妙浪一夏 (上海迪士尼度假区音乐</a></li> <li><a href="/3g/1/623701.html" title="群星《奇妙浪一夏 (上海迪士尼度假区音乐">群星《奇妙浪一夏 (上海迪士尼度假区音乐</a></li> <li><a href="/3g/1/623700.html" title="【古典音乐】詹姆斯·高威《季节》1993[WA">【古典音乐】詹姆斯·高威《季节》1993[WA</a></li> <li><a href="/3g/1/623699.html" title="贝拉芳蒂《卡里普索之王》SACD[WAV+CUE]">贝拉芳蒂《卡里普索之王》SACD[WAV+CUE]</a></li> <li><a href="/3g/1/623698.html" title="小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE">小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE</a></li> <li><a href="/3g/1/623697.html" title="群星《欢迎来到我身边 电影原声专辑》[32">群星《欢迎来到我身边 电影原声专辑》[32</a></li> <li><a href="/3g/1/623696.html" title="群星《欢迎来到我身边 电影原声专辑》[FL">群星《欢迎来到我身边 电影原声专辑》[FL</a></li> <li><a href="/3g/1/623695.html" title="雷婷《梦里蓝天HQⅡ》 2023头版限量编号低">雷婷《梦里蓝天HQⅡ》 2023头版限量编号低</a></li> <li><a href="/3g/1/623694.html" title="群星《2024好听新歌42》AI调整音效【WAV分">群星《2024好听新歌42》AI调整音效【WAV分</a></li> </ul> </div> </div> <div class="sidebar"> <div class="cloud"><h2 class="hometitle">一句话新闻</h2><a href="/3G/1/604623.html"><ul>一文看懂荣耀MagicBook Pro 16<br><br>荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.<br>人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。<br>众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?</ul></a></div> </div> <div class="sidebar"> 友情链接:<a href="http://www.imxmx.com/" title="杰晶网络" target="_blank">杰晶网络</a> <a href="/" title="DDR爱好者之家" target="_blank">DDR爱好者之家</a> <a href="http://www.nqxw.com/" title="南强小屋" target="_blank">南强小屋</a> <a href="http://www.paidiu.com/" title="黑松山资源网" target="_blank">黑松山资源网</a> <a href="http://www.dyhadc.com/" title="白云城资源网" target="_blank">白云城资源网</a> <a href="/sitemap1.xml">站点地图</a> <a href="/sitemap.xml">SiteMap</a> </div> </article> <footer> <p>Design by <a href="http://m.ddrfans.com">DDR爱好者之家</a> <a href="http://m.ddrfans.com">http://m.ddrfans.com</a></p> </footer> <script src="/images3g/nav.js"></script> <script type="text/javascript"> jQuery.noConflict(); jQuery(function() { var elm = jQuery('#left_flow2'); var startPos = jQuery(elm).offset().top; jQuery.event.add(window, "scroll", function() { var p = jQuery(window).scrollTop(); jQuery(elm).css('position', ((p) > startPos) ? 'fixed' : ''); jQuery(elm).css('top', ((p) > startPos) ? '0' : ''); }); }); </script> </body> </html>