callee和caller

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,严格模式下为了安全也不支持,所以在开发中应该避免使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,452评论 0 4
  • callee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数首先我们来写个阶成函数: 从这...
    Joe_Somebody阅读 5,127评论 0 2
  • arguments是个类数组对象,用来保存传入函数中的所有参数,也就是实参对象 arguments对象有个属性叫c...
    章丸丸阅读 2,144评论 0 0
  • 个人博客:https://yeaseonzhang.github.io 花了半个多月的时间,终于又把“JS红宝书”...
    Yeaseon阅读 13,961评论 9 52
  • 你似一搂青青的柳 在迷迷濛濛的雨中绣着忧愁 很少看到你会心的一笑 盈盈地在天空里漂流 漂流着春与夏的邂逅 在春天必...
    达时代阅读 2,701评论 0 1