Home  >  Q&A  >  body text

javascript闭包 - Javascript中callee与caller的用法和应用场景是什么?

callee、caller 与 arguments有什么关系?

PHP中文网PHP中文网2773 days ago456

reply all(3)I'll reply

  • 高洛峰

    高洛峰2017-04-10 15:47:53

    var a = function() {   
        alert(a.caller);   
    }   
    var b = function() {   
        a();   
    }   
    b();  

    结果返回:

    var b = function() {   
        a();   
    } 

    caller返回一个函数的引用,这个函数调用了当前的函数

    var a = function() {   
        alert(arguments.callee);   
    }   
    var b = function() {   
        a();   
    }   
    b(); 

    结果返回:

    var a = function() {   
        alert(arguments.callee);   
    }   

    callee返回正在执行的函数本身的引用,它是arguments的一个属性

    reply
    0
  • 黄舟

    黄舟2017-04-10 15:47:53

    caller返回调用者,如:

    var test = function(){
        console.log(test.caller);
    };
    
    var handler = function(){
        test();
    };
    
    handler(); //caller is handler

    这个时候,test.caller就是handler函数本身。

    callee是被执行的function对象,他是arguments的一个属性如:

    var test = function(){
        console.log(arguments.callee);
    };
    test(); //callee is test

    这里,arguments.callee就是test函数本身

    callee, caller不建议使用,因为这两个属性在严格模式(use strict)下都不存在。譬如:

    var test = function(){
        'use strict';
        console.log(test.caller);
    };
    
    var handler = function(){
        test();
    };
    
    handler(); //error occurred

    这样是会报错的

    reply
    0
  • 迷茫

    迷茫2017-04-10 15:47:53

    caller 向上找他爹
    callee 向上找他自己

    不过还是强烈建议 “放弃吧” strict模式,都已经不建议用了!

    reply
    0
  • Cancelreply