callee
当函数运行时,argument.callee返回的是当前正在执行的函数,见例子:
例子1:
(function fn() {
var x = 1;
alert(arguments.callee);
})()
//弹窗的结果是fn()函数
例子2:(通过callee是实现定时函数setInterval)
//单用setTimeout实现setInterval定时函数效果
var a=1
function fn(){
setTimeout(function(
document.title=a++;
fn();
),100)
}
fn();
//或者如下代码,将fn()改成arguments.callee();
(function() {
var _arguments = arguments;
setTimeout(function() {
document.title = a++;
_arguments.callee();
}, 100);
})();
caller
返回的是函数的一个引用,具体见代码:
例子1:
function fn1() {
console.log(1);
console.log(fn1.caller);//fn2调用了fn1。所以fn1.caller返回的是fn2
}
function fn2() {
console.log(2);
console.log(fn2.caller);fn2是被顶层调用,在javascript中,如果是顶层调用,则返回的是null
fn1();
}
fn2()//打印的值依次是2 -> null -> 1 -> fn2