如何尽早退出javascript脚本标记?
我有一个页面,上面有一堆。。。。部分。在其中一个脚本中,我完成了一半,决定停止,不运行此脚本标记的其余内容,但仍运行页面上的其他代码段。有没有办法不用在函数调用中包装整个代码段就可以做到这一点 例如:如何尽早退出javascript脚本标记?,javascript,web-frontend,Javascript,Web Frontend,我有一个页面,上面有一堆。。。。部分。在其中一个脚本中,我完成了一半,决定停止,不运行此脚本标记的其余内容,但仍运行页面上的其他代码段。有没有办法不用在函数调用中包装整个代码段就可以做到这一点 例如: <script type='text/javascript'> console.log('1 start'); /* Exit here */ console.log('1 end'); </script> <script type='text
<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结束
显而易见的答案是将脚本包装到函数中:
<script type='text/javascript'>
(function(){
console.log('1 start');
return;
console.log('1 end');
})();
</script>
(功能(){
console.log('1 start');
返回;
console.log('1 end');
})();
虽然这通常是最好的方法,但在某些情况下并不合适。所以我的问题是,如果有的话,还有什么其他方法可以做到这一点?或者,如果没有,为什么不呢?实现所需功能的一种方法(停止执行给定脚本块,而不将其包装到函数中)是抛出错误
<script type='text/javascript'>
console.log('1 start');
throw new Error();
console.log('1 end');
</script>
console.log('1 start');
抛出新错误();
console.log('1 end');
当然,这样做的缺点是会导致将错误记录到控制台。您可以使用break语句:
breakCode:{
文件。写入(“1开始”);
/*离开这里*/
破译破译码;
文件。写入(“1结束”);
}
如果要使用抛出方法停止脚本标记(如中所述),但不在控制台中抛出错误消息,下面是一种简单的方法:
log(“这将被记录到控制台。”);
window.onerror=()=>{window.onerror=未定义;返回true;}
掷0;
log(“这不会”);
该代码只是通过window.onerror
捕获错误(返回true
隐藏错误)
如果需要经常使用,您当然可以创建一个全局函数:
函数scriptReturn(){
window.onerror=()=>{window.onerror=未定义;返回true;}
掷0;
}
...
log(“这将被记录到控制台。”);
scriptReturn();
log(“这不会”);
如果您需要在代码的其他地方使用window.onerror
,您可以使用addEventListener
:
window.addEventListener(“错误”,函数(e){…})
无条件退出?我同意@artm的想法-鉴于您(显然)希望无条件退出,您当然可以删除控制台.log('1 end')代码>脚本块中的行!毫无疑问,还有更多的问题,所以我建议您添加更多的细节来解释为什么要退出js块。最终,尽管我怀疑最好的方法是围绕设计和构造代码——在这方面,内联脚本块的使用并不重要;)@NathanRussell我不确定你是否掌握了“榜样”的概念。。。以上代码不是实际生产代码;这只是为了说明情况。在实际的生产系统中,“1-end”部分可能是您有时想要执行而不是其他部分,或者它可能包含在另一个您无法修改的文件中,或者其他一些情况。我不知道在什么情况下这是必要的;我问这个问题主要是出于好奇,因为我认为这是一个很好的问题。这不起作用,因为他的第二个
标签不会运行。是的,它会运行-我在写我的答案(至少在Chrome上)之前通过测试进行了双重检查。哇,goto的回归。。。注意:这只存在于{…}
块中,而不存在可能定义更多函数等的整个脚本(除非这些函数是在块中定义的,但这会使它们的访问变得复杂)
<script type='text/javascript'>
console.log('1 start');
throw new Error();
console.log('1 end');
</script>