是否可以使用 eval 退出函数?

Is it possible to use eval to exit a function?

我有一个类似的代码。

function foo(script) {
  console.log(1);
  
  if(script) {
    eval(script);
  }
  
  console.log(2);
}

foo(/* Some expression */);

console.log(3);

我希望它打印 13 但跳过 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);