javascript中callee與caller的用法和應(yīng)用場景
更新時間:2010年12月08日 16:14:07 作者:
javascript中callee和caller的用法和應(yīng)用場景分析,需要的朋友可以參考下。
caller :
functionName.caller 返回調(diào)用者。
看看下面的函數(shù),大家可以復(fù)制到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還有個非常有用的應(yīng)用就是用來判斷實際參數(shù)跟行參是否一致。上面的代碼第一個消息框會彈出實際參數(shù)的長度為1,形式參數(shù)也就是函數(shù)本身的參數(shù)長度為2.
應(yīng)用場景:
callee的應(yīng)用場景一般用于匿名函數(shù)
大家看下下面一段代碼 摘自網(wǎng)絡(luò)
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)用即相當(dāng)于調(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的應(yīng)用場景 主要用于察看函數(shù)本身被哪個函數(shù)調(diào)用。
functionName.caller 返回調(diào)用者。
看看下面的函數(shù),大家可以復(fù)制到VS中執(zhí)行下
復(fù)制代碼 代碼如下:
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)上
復(fù)制代碼 代碼如下:
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還有個非常有用的應(yīng)用就是用來判斷實際參數(shù)跟行參是否一致。上面的代碼第一個消息框會彈出實際參數(shù)的長度為1,形式參數(shù)也就是函數(shù)本身的參數(shù)長度為2.
應(yīng)用場景:
callee的應(yīng)用場景一般用于匿名函數(shù)
大家看下下面一段代碼 摘自網(wǎng)絡(luò)
復(fù)制代碼 代碼如下:
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)用即相當(dāng)于調(diào)用
一個全局變量,不能很好的體現(xiàn)出是調(diào)用自身,這時使用callee會是一個比較好的方法
復(fù)制代碼 代碼如下:
var fn=(function(n){
if(n>0) return n+arguments.callee(n-1);
return 0;
})(10);
alert(fn)
這樣就讓代碼更加簡練。又防止了全局變量的污染。
caller的應(yīng)用場景 主要用于察看函數(shù)本身被哪個函數(shù)調(diào)用。
您可能感興趣的文章:
- js apply/call/caller/callee/bind使用方法與區(qū)別分析
- javascript下arguments,caller,callee,call,apply示例及理解
- js中arguments,caller,callee,apply的用法小結(jié)
- 理解Javascript的caller,callee,call,apply區(qū)別
- Javascript - 全面理解 caller,callee,call,apply
- 理解JavaScript的caller,callee,call,apply
- JavaScript中的apply()方法和call()方法使用介紹
- js中繼承的幾種用法總結(jié)(apply,call,prototype)
- 詳解js中的apply與call的用法
- javascript中apply和call方法的作用及區(qū)別說明
- javascript中callee與caller的區(qū)別分析
- javascript中call,apply,callee,caller用法實例分析
相關(guān)文章
基于Javascript實現(xiàn)的不重復(fù)ID的生成器
本文介紹了js生成一個不重復(fù)的ID的函數(shù)的進化之路,具有一定的參考價值,需要的朋友一起來看下吧2016-12-12
非常漂亮的讓背景如此暗淡(一種彈出提示信息時頁面背景色調(diào)改變的方法)
非常漂亮的讓背景如此暗淡(一種彈出提示信息時頁面背景色調(diào)改變的方法)...2007-04-04
JS使用ActiveXObject實現(xiàn)用戶提交表單時屏蔽敏感詞功能
這篇文章主要介紹了JS采用ActiveXObject實現(xiàn)用戶在提交表單時屏蔽敏感詞的功能的相關(guān)資料,需要的朋友可以參考下2017-06-06
JavaScript知識點總結(jié)(五)之Javascript中兩個等于號(==)和三個等于號(===)的區(qū)別
這篇文章主要介紹了JavaScript知識點總結(jié)(五)之Javascript中兩個等于號(==)和三個等于號(===)的區(qū)別的相關(guān)資料,需要的朋友可以參考下2016-05-05
JavaScript函數(shù)式編程(Functional Programming)高階函數(shù)(Higher order fun
這篇文章主要介紹了JavaScript函數(shù)式編程(Functional Programming)高階函數(shù)(Higher order functions),結(jié)合實例形式分析了javascript函數(shù)式編程高級函數(shù)的概念、原理、用法及相關(guān)操作注意事項,需要的朋友可以參考下2019-05-05

