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

callee、caller 与 arguments有什么关系?

阅读 4.3k
3 个回答
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的一个属性

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

这样是会报错的

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题