1

parentを呼び出す関数がありchild、内部で他の処理を実行しますotherStuff

function parent() {
    child();

    otherStuff();
}

コールがリターンの直後に戻るように変更child(およびそのままにするparent)することは可能ですか?これはEcmaScript6で可能ですか?childparentchild

4

1 に答える 1

0

これを行うための悪い方法は、で例外をスローすることです。これにより、元の呼び出し元childにバブルアップしてからparent元の呼び出し元にバブルします。parentこのアプローチは、の元の呼び出し元が例外をキャッチすることを期待します。

function originalCaller() {
  try {
    parent();
  }
  catch(e) {}
}

function parent() {
  child();
  otherStuff();
}

function child() {
  throw 0;
}

function otherStuff() {
  // other stuff
}

そのままにしておきたいですparentよね?したがって、醜い方法childは一時的に変更させることotherStuffです:

function child() {
  _otherStuff = otherStuff;
 otherStuff = function() { otherStuff = _otherStuff; }
}

この方法では、一度otherStuffは何も行わず、その後元の状態に戻ります。繰り返しますが、それは完全に醜いだけでなく、の構造についての仮定をします。parent

于 2013-01-11T21:31:23.460 に答える