js中的 caller与callee用法小实例

caller

函数fun的caller返回调用fun的函数对象,即fun的执行环境,如果fun的执行环境为window则返回null
function fun(){
    console.log(fun.caller)//这里必须写在fun里面,因为caller只有函数执行过程中才有效
}
fun();
//结果为:null

下面包裹一层

function a(){
    fun();
    function fun(){
        console.log(fun.caller)//这里必须写在fun里面,因为caller只有函数执行过程中才有效
    }
}
a();

结果为: a函数
这里写图片描述

在包裹一层

function a(){
    b();
    function b(){
        fun();
        function fun(){
            console.log(fun.caller)//这里必须写在fun里面,因为caller只有函数执行过程中才有效
        }
    }
}
a();

结果为: b函数
这里写图片描述

callee

这个属性在函数的arguments上面
function a (){
    console.log(arguments.callee)
}
a();
//结果为a函数本身

下面一个经典的阶乘函数

function sum (num){
    if(num <= 1){
        return 1;
    }else{
        return num * (sum(num - 1))
    }
}
console.log(sum(5))
//结果:5*4*3*2*1=120

为避免函数名称修改致使函数内部报错,改写成下面

function sum (num){
    if(num <= 1){
        return 1;
    }else{
        return num * (arguments.callee(num - 1))
    }
}
console.log(sum(5))
//结果:5*4*3*2*1=120

//callee的另外一种用途

function a(num1,num2,num3){
    console.log(arguments.length);//实参长度为1
    console.log(arguments.callee.length);//行参长度为3
}
a(0); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值