callee和caller用法比较

callee

当函数运行时,argument.callee返回的是当前正在执行的函数,见例子:

例子1:

(function fn() {
            var x = 1;
            alert(arguments.callee);
        })()
//弹窗的结果是fn()函数

例子2:(通过callee是实现定时函数setInterval)

//单用setTimeout实现setInterval定时函数效果
var a=1
function fn(){
    setTimeout(function(
    document.title=a++;
    fn();
),100)
}
fn();

//或者如下代码,将fn()改成arguments.callee();
 (function() {
            var _arguments = arguments;
            setTimeout(function() {
                document.title = a++;
                _arguments.callee();
            }, 100);
        })();

caller

返回的是函数的一个引用,具体见代码:

例子1:

 function fn1() {
            console.log(1);
            console.log(fn1.caller);//fn2调用了fn1。所以fn1.caller返回的是fn2
        }

        function fn2() {
            console.log(2);
            console.log(fn2.caller);fn2是被顶层调用,在javascript中,如果是顶层调用,则返回的是null
            fn1();
        }
fn2()//打印的值依次是2 -> null -> 1 -> fn2

转载于:https://my.oschina.net/u/3407699/blog/881932

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值