9

私がこの機能を持っているとしましょう:

function test () {

    // statements 1

    statement_X;

    // statements 2

}

ブラウザーの開発ツールを使用してステートメントを実行しています。ここで、「statement_X」で一時停止したときに、関数の実行を終了したいと思います (関数の「statements 2」の部分を実行したくありません)。まるで「statement_X」の直後に続くかのようにreturn;声明。

Chrome にはインライン スクリプト編集があることを知っているので、一時停止ステートメントの後に手動で return ステートメントを追加し、CTRL+S を押して全体を再実行できますが、IE にもこの機能が必要なので、一般的な解決策。

実行を早期に終了することは (ブラウザーにとって) 簡単なことのように思えるので、開発ツールにそのような機能を期待しています。

ここに画像の説明を入力

4

2 に答える 2

3

私はこれを IE 9 で正常にテストしたので、回答としてここに投稿します。statement_Xスクリプト デバッガーで一時停止している間に F10 を押すstatement_Xと、まだ実行されます。次に、囲んでいる関数の最後の行を右クリックします (関数本体を終了する右中括弧}) を選択し、ドロップダウン メニューから [次のステートメントを設定] を選択します。これは、 の直後に void return ステートメントがあるかのように、関数の最後まで実行をスキップしますstatement_X

以下のコードに示すように、関数の最後の行に他のステートメントがある場合は、この手法が機能するように中括弧だけを右クリックするように注意してください。

function test () { alert("statement 1");
    alert("statement 2"); } function test2 () { alert("statement 3"); }

これは、インライン関数の場合、またはデバッグ用ではない縮小されたスクリプトで必要になることがあります。

于 2012-04-24T23:00:38.893 に答える
0

私の理解が正しければ、あなたはこれを行うことはできません。

デバッガー (少なくとも Chrome のデバッガー) は、それ自体が JavaScript ベースです。

これらの人はeval()(最終的に)挿入されたコードを実行するために使用します。Chromeインスペクターをトロールすると、何かを評価しようとすると、デバッガーコードが最終的にこれを呼び出すようです(私は思います):

function (evalFunction, object, expression, isEvalOnCallFrame, injectCommandLineAPI)
{
    // Only install command line api object for the time of evaluation.
    // Surround the expression in with statements to inject our command line API so that
    // the window object properties still take more precedent than our API functions.

    try {
        if (injectCommandLineAPI && inspectedWindow.console) {
            inspectedWindow.console._commandLineAPI = new CommandLineAPI(this._commandLineAPIImpl, isEvalOnCallFrame ? object : null);
            expression = "with ((window && window.console && window.console._commandLineAPI) || {}) {\n" + expression + "\n}";
        }
        return evalFunction.call(object, expression);
    } finally {
        if (injectCommandLineAPI && inspectedWindow.console)
            delete inspectedWindow.console._commandLineAPI;
    }
}

evalFunctionの単なるエイリアスですeval()

問題は、ハードコードであっても、eval で return ステートメントを使用できないことです。それは常にあなたを与えますSyntaxError: Illegal return statement

いいえ、ブードゥーリターンステートメントはありません。

于 2012-04-22T14:17:07.987 に答える