callee、caller 与 arguments有什么关系?
高洛峰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的一个属性
黄舟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
这样是会报错的