call、callee、caller详解

call

call用于改变函数指向。

call是Funcrion.prototype的属性方法

function add(a, b) {
    console.log(this);
    return a + b;
}

add(1, 2);  //this=window,严格模式下为undefined
add.call({ name: "新指向" }, 3, 4)  //this={ name: "新指向" }

callee

callee主要用于代替函数名,降低耦合性。

calleearguments对象的一个属性,可以获取函数自身。

//乘阶函数
function chengjie(n) {
    if (n == 1) {
        return 1;
    }

    return n * chengjie(n - 1);
}

let result = chengjie(5);
console.log(result)

如上代码:如果chengjie()的函数名称变更了,那么我也需要手动变更其内部使用的chengjie(n-1)。如果函数名被大量使用,那么需要修改的地方就会很多。callee的作用就是让函数名一改全改。

//乘阶函数
function chengjie(n) {
    if (n == 1) {
        return 1;
    }

    return n * arguments.callee(n - 1);
}

//变更函数名
var jc = chengjie;
//回收chengjie函数
chengjie=null;
let result = jc(5);
console.log(result)

可以看出,我们变更了函数名后,jc仍是一个函数,而chengjie已经是一个null,无法正常执行了

caller

caller返回函数被谁调用了。

function add(a, b) {
    print(a + b);
}

function print(value) {
    console.log(print.caller)      //[Function: add],返回print被谁调用了
    console.log(value)              //3
}

add(1,2)
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值