5

我有一页有一堆....部分。在其中一个中,我完成了一半并决定我要停止,而不是运行此脚本标记的其余内容 - 但仍运行页面上的其他代码段。有没有办法在将整个代码段包装在函数调用中的情况下做到这一点?

例如:

<script type='text/javascript'>
    console.log('1 start');
    /* Exit here */
    console.log('1 end');
</script>
<script type='text/javascript'>
    console.log('2 start');
    console.log('2 end');
</script>

这应该产生输出

1 start
2 start
2 end

而不是1 end

显而易见的答案是将脚本包装在一个函数中:

<script type='text/javascript'>
    (function(){
        console.log('1 start');
        return;
        console.log('1 end');
    })();
</script>

虽然这通常是最好的方法,但也有不适合的情况。所以我的问题是,如果有的话,还有什么其他方法可以做到这一点?或者如果不是,为什么不呢?

4

3 回答 3

3

您可以使用 break 语句:

breakCode : {
  document.write('1 start');
  /* Exit here */
  break breakCode;
  document.write('1 end');
}

使用标签引用,break 语句可用于跳出任何代码块


参考

于 2015-06-04T12:03:26.377 回答
1

实现您想要的一种方法(停止执行给定脚本块,而不将其包装在函数中)是抛出错误。

<script type='text/javascript'>
    console.log('1 start');
    throw new Error();
    console.log('1 end');
</script>

当然,这样做的缺点是它会导致错误被记录到控制台。

于 2015-06-04T10:39:18.017 回答
0

如果您想使用该throw方法(在@knolleary 的答案中提到)停止脚本标记,但不在控制台中抛出错误消息,这里有一个 hacky 方法:

<script>
  console.log("This will get logged to console.");
  window.onerror = () => { window.onerror=undefined; return true; }
  throw 0;
  console.log("This won't.");
</script>

该代码只是捕获错误window.onerror(返回true隐藏错误)。

如果您需要经常使用它,您当然可以创建一个全局函数:

<script>
  function scriptReturn() {
    window.onerror = () => { window.onerror=undefined; return true; }
    throw 0;
  }
</script>
...
<script>
  console.log("This will get logged to console.");
  scriptReturn();
  console.log("This won't.");
</script>

如果您需要window.onerror在代码中的其他地方使用,您可以使用addEventListener

window.addEventListener("error", function(e) { ... })
于 2021-05-17T16:36:55.253 回答