亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JS Function.caller 和 arguments.callee學(xué)習(xí)

系統(tǒng) 2214 0

文章參考http://www.jb51.net/article/25561.htm

?

先看兩個(gè)小例子,讓您有個(gè)大概印象

      function myfunc() {
	if (myfunc.caller) {
		alert(myfunc.caller);
		//alert(myfunc.caller.toString());
	} else {
		alert("函數(shù)直接執(zhí)行");
	}
}
function handleCaller() {
	myfunc();
}
handleCaller();
myfunc();
    

?大家會(huì)發(fā)現(xiàn)第一個(gè)alert會(huì)彈出調(diào)用myfunc函數(shù)的調(diào)用者h(yuǎn)andleCaller,

而第二個(gè)alert由于沒(méi)有在其他函數(shù)體內(nèi)調(diào)用,所以myfunc.caller為null,就執(zhí)行了 alert("函數(shù)直接執(zhí)行");?

?

      function calleeLengthDemo(arg1, arg2) {
	alert(arguments.callee);
	//alert(arguments.callee.toString());
	if (arguments.length == arguments.callee.length) {
		window.alert("驗(yàn)證形參和實(shí)參長(zhǎng)度正確!");
		return;
	} else {
		alert("實(shí)參長(zhǎng)度:" + arguments.length);
		alert("形參長(zhǎng)度: " + arguments.callee.length);
	}
}
calleeLengthDemo(1);
    

? 第一個(gè)消息框彈出calleeLengthDemo函數(shù)本身,這說(shuō)明callee就是函數(shù)本身對(duì)象的引用。 callee還有個(gè)非常有用的應(yīng)用就是用來(lái)判斷實(shí)際參數(shù)跟行參是否一致 。上面的代碼第一個(gè)消息框會(huì)彈出實(shí)際參數(shù)的長(zhǎng)度為1,形式參數(shù)也就是函數(shù)本身的參數(shù)長(zhǎng)度為2.?

?


?caller

返回一個(gè)對(duì)函數(shù)的引用, 該函數(shù)調(diào)用了當(dāng)前函數(shù)

? ? functionName.caller?

? ? functionName 對(duì)象是所執(zhí)行函數(shù)的名稱。

說(shuō)明:

對(duì)于函數(shù)來(lái)說(shuō), caller屬性只有在函數(shù)執(zhí)行時(shí)才有定義。如果函數(shù)是由頂層調(diào)用的,那么 caller包含的就是 null 。如果在字符串上下文中使用 caller屬性,那么結(jié)果和 functionName.toString 一樣,也就是說(shuō),顯示的是函數(shù)的反編譯文本,

注意:Function.toString() 可以實(shí)現(xiàn) Function 的反編譯功能.如加上遞歸功能則功能更加強(qiáng)大

下面的例子說(shuō)明了 caller 屬性的用法:

?

      function callerDemo() {
    if (callerDemo.caller) {
        var a= callerDemo.caller.toString();
          alert(a);
      } else {
          alert("this is a top function");
      }
}
function handleCaller() {
      callerDemo();
}
    

??

?callee ??

?返回正被執(zhí)行的 Function 對(duì)象,也就是所指定的 Function 對(duì)象的正文。

[function.]arguments.callee可選項(xiàng) function參數(shù)是當(dāng)前正在執(zhí)行的 Function對(duì)象的名稱

說(shuō)明callee屬性的初始值就是正被執(zhí)行的 Function 對(duì)象。

callee屬性是 arguments 對(duì)象的一個(gè)成員,它表示對(duì)函數(shù)對(duì)象本身的引用,這有利于匿名函數(shù)的遞歸或者保證函數(shù)的封裝性,例如下邊示例的遞歸計(jì)算1到n的自然數(shù)之和。而該屬性僅當(dāng)相關(guān)函數(shù)正在執(zhí)行時(shí)才可用。還有需要注意的是callee擁有l(wèi)ength屬性,這個(gè)屬性有時(shí)候用于驗(yàn)證還是比較好的。

arguments.length是實(shí)參長(zhǎng)度,arguments.callee.length是形參長(zhǎng)度,由此可以判斷調(diào)用時(shí)形參長(zhǎng)度是否和實(shí)參長(zhǎng)度一致。示例

?

      function calleeDemo() {
      alert(arguments.callee);
}
//用于驗(yàn)證參數(shù)
function calleeLengthDemo(arg1, arg2) {
    if (arguments.length==arguments.callee.length) {
          window.alert("驗(yàn)證形參和實(shí)參長(zhǎng)度正確!");
        return;
      } else {
          alert("實(shí)參長(zhǎng)度:" +arguments.length);
          alert("形參長(zhǎng)度: " +arguments.callee.length);
      }
}
    

??


?如何利用arguments.callee來(lái)執(zhí)行遞歸函數(shù)

?

傳統(tǒng)實(shí)現(xiàn)方式

      var sum = function(n){
    if (1==n) return 1;
    else return n + sum (n-1);
}
    

?

缺點(diǎn):函數(shù)內(nèi)部包含了對(duì)自身的引用,函數(shù)名僅僅是一個(gè)變量名,在函數(shù)內(nèi)部調(diào)用即相當(dāng)于調(diào)用?

一個(gè)全局變量,不能很好的體現(xiàn)出是調(diào)用自身,這時(shí)使用callee會(huì)是一個(gè)比較好的方法?

??

      var sum = function(n){
if (n <= 0)                        
	return 1;
else
    return n + arguments.callee(n - 1)
}
    

?

調(diào)用時(shí):alert(sum(100));

其中函數(shù)內(nèi)部包含了對(duì)sum自身的引用,函數(shù)名僅僅是一個(gè)變量名,在函數(shù)內(nèi)部調(diào)用sum即相當(dāng)于調(diào)用一個(gè)全局變量,不能很好的體現(xiàn)出是調(diào)用自身,這時(shí)使用callee會(huì)是一個(gè)比較好的方法。

?


?

      <script type="text/javascript" >
function test(event){
	//彈出調(diào)用test方法的函數(shù)
	alert(test.caller);
	//彈出test方法的字符串
	alert(arguments.callee);
}
</script>
<input onclick="test(event)"/>
    

?

? JS Function.caller 和 arguments.callee學(xué)習(xí)

??

JS Function.caller 和 arguments.callee學(xué)習(xí)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 香蕉tv亚洲专区在线观看 | 国内精品久久影院 | 国内精品亚洲 | 欧美破处在线 | 91精彩视频 | 免费a级特黄国产大片 | 奇米在线观看 | 国产精品蜜臀 | 精品中文字幕不卡在线视频 | 日韩成人在线视频 | 老头与老头同性tube可播放 | www一级毛片 | 天天天做天天天天爱天天想 | 青青影院一区二区免费视频 | 在线亚洲欧洲国产综合444 | 精品乱人伦一区二区 | 婷婷色中文 | 国产精品亚洲成在人线 | 中文字幕或区 | 一线视频日本 | 蜜桃综合 | 最近中文字幕无吗高清视频 | 日本免费特黄aa毛片 | 亚洲精品色综合色在线观看 | 成人三级视频在线观看 | 中文字幕日本一区久久 | 亚洲成人99| 精品国产一区二区三区不卡在线 | 中文字幕一区婷婷久久 | 韩国爱情片免费大全 | 免费精品一区二区三区在线观看 | 亚洲国产欧美国产综合一区 | 国产精品线在线精品国语 | 日本一级毛片视频网站 | 欧美理论在线观看 | 一级欧美一级日韩毛片99 | 97人人澡| 日韩av成人| 成人国产精品视频 | 久久久久国产成人精品亚洲午夜 | 爱爱小视频在线观看网站 |