假设我有这个功能:
function test () {
// statements 1
statement_X;
// statements 2
}
我正在使用浏览器的开发工具来处理这些语句。现在,当我暂停“statement_X”时,我想终止函数执行(我不希望执行函数的“语句2”部分),就好像“statement_X”紧跟其后一样return;
声明。
我知道Chrome有内联脚本编辑,所以我可以在暂停的语句之后手动添加return语句,然后点击CTRL + S重新执行整个事情,但我也需要IE的这个功能,所以我是希望得到一般解决方案。
提前终止执行似乎是一件容易的事情(对于浏览器),所以我期望开发工具提供这样的功能。
答案 0 :(得分:2)
我在IE 9中成功测试了这个,所以我在这里作为答案发布:在脚本调试器中暂停statement_X
时,点击F10以便仍然执行statement_X
,然后右键单击在封闭函数的最后一行(带有右括号}
的行终止函数体),并从下拉菜单中选择“设置下一个语句”。这将跳过执行直到函数结束,好像在statement_X
之后有一个void return语句。
如果函数的最后一行有任何其他语句,如下面的代码所示,请注意右键单击大括号以使此技术起作用。
function test () { alert("statement 1");
alert("statement 2"); } function test2 () { alert("statement 3"); }
对于内联函数或者不用于调试的缩小脚本,有时可能需要这样做。
答案 1 :(得分: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
。
所以不,没有伏都教回报声明。