国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript中callee與caller的用法和應用場景

2019-11-21 00:03:22
字體:
供稿:網(wǎng)友
caller :
functionName.caller 返回調(diào)用者。

看看下面的函數(shù),大家可以復制到VS中執(zhí)行下
復制代碼 代碼如下:

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


大家會發(fā)現(xiàn)第一個alert會彈出調(diào)用caller函數(shù)的調(diào)用者handleCaller,而第二個alert由于沒有在其他函數(shù)體內(nèi)調(diào)用,所以caller為null,就執(zhí)行了 alert("函數(shù)直接執(zhí)行");


callee:


返回正被執(zhí)行的 Function 對象,也就是所指定的 Function 對象的正文.
callee是arguments 的一個屬性成員,它表示對函數(shù)對象本身的引用,這有利于匿名

函數(shù)的遞歸或者保證函數(shù)的封裝性。 下面一段代碼先說明callee的用法,實例代碼摘自網(wǎng)上
復制代碼 代碼如下:

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

第一個消息框彈出calleeLengthDemo函數(shù)本身,這說明callee就是函數(shù)本身對象的引用。callee還有個非常有用的應用就是用來判斷實際參數(shù)跟行參是否一致。上面的代碼第一個消息框會彈出實際參數(shù)的長度為1,形式參數(shù)也就是函數(shù)本身的參數(shù)長度為2.



應用場景:
callee的應用場景一般用于匿名函數(shù)
大家看下下面一段代碼 摘自網(wǎng)絡
復制代碼 代碼如下:

var fn=function(n){
if(n>0) return n+fn(n-1);
return 0;
}
alert(fn(10))

函數(shù)內(nèi)部包含了對自身的引用,函數(shù)名僅僅是一個變量名,在函數(shù)內(nèi)部調(diào)用即相當于調(diào)用
一個全局變量,不能很好的體現(xiàn)出是調(diào)用自身,這時使用callee會是一個比較好的方法
復制代碼 代碼如下:

var fn=(function(n){
if(n>0) return n+arguments.callee(n-1);
return 0;
})(10);
alert(fn)

這樣就讓代碼更加簡練。又防止了全局變量的污染。

caller的應用場景 主要用于察看函數(shù)本身被哪個函數(shù)調(diào)用。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 河津市| 乌海市| 太和县| 黔南| 甘德县| 宁津县| 图木舒克市| 巴东县| 伊宁市| 锦州市| 玉龙| 青神县| 涪陵区| 延吉市| 永州市| 汨罗市| 淄博市| 阿拉尔市| 焦作市| 阿拉善盟| 改则县| 汝阳县| 岗巴县| 麦盖提县| 吴江市| 东乡族自治县| 浦北县| 嘉义县| 武强县| 靖江市| 西安市| 手游| 镇江市| 新巴尔虎右旗| 恩平市| 丰镇市| 华宁县| 浦江县| 陆丰市| 剑阁县| 平陆县|