caller返回值是誰調(diào)用了這個(gè)函數(shù)胀蛮,就返回那個(gè)調(diào)用者院刁,如果自己調(diào)用自己,就返回null
callee是arguments的一個(gè)屬性粪狼,無論誰調(diào)用這個(gè)函數(shù)退腥,返回的是這個(gè)函數(shù)本身
caller返回一個(gè)函數(shù)的引用,這個(gè)函數(shù)調(diào)用了當(dāng)前的函數(shù);callee放回正在執(zhí)行的函數(shù)本身的引用再榄,它是arguments的一個(gè)屬性
caller
caller返回一個(gè)函數(shù)的引用狡刘,這個(gè)函數(shù)調(diào)用了當(dāng)前的函數(shù)。
使用這個(gè)屬性要注意:
1 這個(gè)屬性只有當(dāng)函數(shù)在執(zhí)行時(shí)才有用
2 如果在JavaScript程序中困鸥,函數(shù)是由頂層調(diào)用的嗅蔬,則返回null
functionName.caller: functionName是當(dāng)前正在執(zhí)行的函數(shù)。
[javascript]view plaincopy
vara?=function()?{
alert(a.caller);
}
varb?=function()?{
a();
}
b();
上面的代碼中疾就,b調(diào)用了a澜术,那么a.caller返回的是b的引用,結(jié)果如下:
[javascript]view plaincopy
varb?=function()?{
a();
}
如果直接調(diào)用a(即a在任何函數(shù)中被調(diào)用猬腰,也就是頂層調(diào)用),返回null:
[javascript]view plaincopy
vara?=function()?{
alert(a.caller);
}
varb?=function()?{
a();
}
//b();
a();
輸出結(jié)果:
null
callee
callee返回正在執(zhí)行的函數(shù)本身的引用鸟废,它是arguments的一個(gè)屬性
使用callee時(shí)要注意:
1 這個(gè)屬性只有在函數(shù)執(zhí)行時(shí)才有效
2 它有一個(gè)length屬性,可以用來獲得形參的個(gè)數(shù)姑荷,因此可以用來比較形參和實(shí)參個(gè)數(shù)是否一致盒延,即比較arguments.length是否等于arguments.callee.length
3 它可以用來遞歸匿名函數(shù)缩擂。
[javascript]view plaincopy
vara?=function()?{
alert(arguments.callee);
}
varb?=function()?{
a();
}
b();
a在b中被調(diào)用,但是它返回了a本身的引用兰英,結(jié)果如下:
[javascript]view plaincopy
vara?=function()?{
alert(arguments.callee);
}