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