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


callee、caller 与 arguments有什么关系?

javascript对象 javascript闭包 JavaScript

噼哩啪啦嘣 8 years, 8 months ago

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

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

46564 answered 8 years, 8 months ago

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

这样是会报错的

传说D裤子 answered 8 years, 8 months ago


 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的一个属性

ThomasL answered 8 years, 8 months ago

Your Answer