如何提前退出 javascript 脚本标签?
How to exit javascript script tags early?
我有一个包含一堆....部分的页面。在其中一个中,我完成了一半并决定我要停止,而不是 运行 这个脚本标签的其余内容 - 但仍然 运行 页面上的其他代码段。有什么方法可以做到这一点 而无需 将整个代码段包装在一个函数调用中?
例如:
<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>
虽然这通常是最好的方法,但在某些情况下并不合适。所以我的问题是,如果有的话,还有什么其他方法可以做到这一点?或者,如果不是,为什么不呢?
实现您想要的(停止执行给定脚本块,而不将其包装在函数中)的一种方法是抛出错误。
<script type='text/javascript'>
console.log('1 start');
throw new Error();
console.log('1 end');
</script>
当然,这样做的缺点是它会导致错误记录到控制台。
您可以使用 break 语句:
breakCode : {
document.write('1 start');
/* Exit here */
break breakCode;
document.write('1 end');
}
有了标签引用,break语句可以跳出任何代码块
参考
如果你想使用 throw
方法(在 中提到)停止脚本标签,但又不想在控制台中抛出错误消息,这里有一个 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) { ... })
我有一个包含一堆....部分的页面。在其中一个中,我完成了一半并决定我要停止,而不是 运行 这个脚本标签的其余内容 - 但仍然 运行 页面上的其他代码段。有什么方法可以做到这一点 而无需 将整个代码段包装在一个函数调用中?
例如:
<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>
虽然这通常是最好的方法,但在某些情况下并不合适。所以我的问题是,如果有的话,还有什么其他方法可以做到这一点?或者,如果不是,为什么不呢?
实现您想要的(停止执行给定脚本块,而不将其包装在函数中)的一种方法是抛出错误。
<script type='text/javascript'>
console.log('1 start');
throw new Error();
console.log('1 end');
</script>
当然,这样做的缺点是它会导致错误记录到控制台。
您可以使用 break 语句:
breakCode : {
document.write('1 start');
/* Exit here */
break breakCode;
document.write('1 end');
}
有了标签引用,break语句可以跳出任何代码块
参考
如果你想使用 throw
方法(在
<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) { ... })