1

我正在通过

arguments.callee.caller

但是如果我想再次调用调用者函数,我该怎么办?

4

5 回答 5

3

只需再次调用该函数。

arguments.callee.caller()

例子:

function A(){
    B();
}
function B(){
    arguments.callee.caller(); // It will call the A again.
}
于 2012-11-29T09:38:19.067 回答
2

函数里面arguments.callee.caller是对调用者函数的引用,其实typeof arguments.callee.caller === 'function'这样就可以直接调用了:

arguments.callee.caller(arg1, arg2, arg3, [...]);

或者你可以这样做:

arguments.callee.caller.call(context, arg1, arg2, arg3, [...]);

或这个:

arguments.callee.caller.apply(context, [arg1, arg2, arg3, [...]]);

正如其他人所说,请注意性能问题!

于 2012-11-29T09:39:10.213 回答
0

我的第一个提示是:

var nm = arguments.callee.caller.name

然后调用“nm”。使用 eval 或一些 switch-cases。

于 2012-11-29T09:34:01.560 回答
0

你应该喜欢 Function.caller 而不是 arguments.callee.caller (尤其是因为人们无法决定这是否被弃用)

为什么 JavaScript 中不推荐使用 arguments.callee.caller 属性?

举例说明用法:

var i = 0;

function foo () {
    bar();
}

function bar() {
    if ( i < 10 ) {
        i += 1;
        bar.caller();
    }
}

foo();

// Logs 10
console.log(i);

尽管在现实世界中,您可能希望在调用它之前检查调用者是一个函数。

于 2012-11-29T09:46:48.123 回答
0

注意无限循环:

// The 'callee'
function f(arg) { 
   var cf = arguments.callee.caller; 
   cf.call(42); 
}

// .. and the caller
function g(arg) {
   if (arg === 42) {
      alert("The Answer to..");
   } else {
      f(1); // or whatever
   }
}

// call the caller
g(21)
于 2012-11-29T09:40:44.080 回答