callee和caller

2017-04-27  本文已影响65人  David三人行

callee和caller这两个属性在命名上非常相似,总是后搞混,现在梳理一下。
callee是arguments的属性,返回当前函数的引用。所以常用来做递归。

function factorial(num){
    if(num>1){
        return num*arguments.callee(num-1)
    }else{
        return 1
    }
}

caller用于返回调用当前函数的函数。听起来有点拗口,其实就是返回当前函数栈的上一层。

function a(){
    console.log(a.caller)
}
function b(){
  a()
}
b()//b

即使是匿名函数调用也会返回

(function(){
  a()
})

但是直接访问、对象访问均会返回null。

另外,箭头函数不支持caller和callee,严格模式下为了安全也不支持,所以在开发中应该避免使用。

上一篇 下一篇

猜你喜欢

热点阅读