callee和caller這兩個(gè)屬性在命名上非常相似,總是后搞混办绝,現(xiàn)在梳理一下。
callee是arguments的屬性姚淆,返回當(dāng)前函數(shù)的引用孕蝉。所以常用來做遞歸。
function factorial(num){
if(num>1){
return num*arguments.callee(num-1)
}else{
return 1
}
}
caller用于返回調(diào)用當(dāng)前函數(shù)的函數(shù)腌逢。聽起來有點(diǎn)拗口降淮,其實(shí)就是返回當(dāng)前函數(shù)棧的上一層。
function a(){
console.log(a.caller)
}
function b(){
a()
}
b()//b
即使是匿名函數(shù)調(diào)用也會(huì)返回
(function(){
a()
})
但是直接訪問、對象訪問均會(huì)返回null佳鳖。
另外霍殴,箭頭函數(shù)不支持caller和callee,嚴(yán)格模式下為了安全也不支持系吩,所以在開發(fā)中應(yīng)該避免使用来庭。