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を使用するか、いくつかのスイッチケースを使用します。

于 2012-11-29T09:34:01.560 に答える
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 に答える
0

arguments.callee.callerよりもFunction.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 に答える