我有一个类似的代码。
function foo(script) {
console.log(1);
if(script) {
eval(script);
}
console.log(2);
}
foo(/* Some expression */);
console.log(3);
我希望它打印1
和3
,但跳过2
。
我试过
foo('return');
它不起作用。
我也试过
foo('throw new Error()')
但它也跳过了3
。
那么是否可以通过eval
退出该功能?
throw new Error()
表达式可以工作,但您需要将eval(script)
和所有后续逻辑封装在try/catch块中:
function foo(script) {
console.log(1);
try {
if (script) {
eval(script);
}
console.log(2);
} catch(e) { }
}
foo('throw new Error()');
console.log(3);