JavaScript:caller 和 callee

caller

caller 是函数对象的一个属性,返回一个函数的引用,该函数调用了当前函数。使用这个属性是要注意:

  • 这个属性只有当函数在执行时才有用;
  • 如果在 JavaScript 程序中,函数是由顶层调用的,则返回 null。
1
2
3
4
5
6
7
8
9
var a = function() {
console.log(a.caller);
}
var b = function() {
a();
}
b();

输出的结果为:

1
2
3
function () {
a();
}

但若是将代码改为:

1
2
3
4
5
6
7
8
9
var a = function() {
console.log(a.caller);
}
var b = function() {
a();
}
a();

输出的结果为 null

callee

callee 返回正在执行的函数本身的引用,它是 arguments 的一个属性。使用 callee 时要注意:

  • 这个属性只有在函数执行时才有效;
  • 它有一个 length 属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较 arguments.length 是否等于 arguments.callee.length;
  • 它可以用来递归匿名函数。
1
2
3
4
5
6
7
8
9
var a = function() {
console.log(arguments.callee);
}
var b = function() {
a();
}
b();

输出结果为:

1
2
3
function () {
console.log(arguments.callee);
}
坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章