我看到一个关于烤面包机的问题,并向答案的作者寻求解释。他抛出了一个 MDN 链接:https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label 当然,我不是 js 大师,我求助于大师,他给了我另一个链接,并说这是 GOTO 的亲戚:https: //habr.com/ru/articles/271131/ 因为我没有'什么都不懂,请用人类语言解释为什么这样设计:
LABEL:
statenent
不好...我需要理论解释..plz
这是一种通用语言结构,用于快速从程序中的一个位置移动到具有许多限制(以及中断和继续)的另一个位置。通常来自循环和数据处理的深层嵌套。类似的运算符被故意保留在其他语言中;如果它们不好,它们早就被删除了。
使用语言结构有不好的做法,也有好的做法。在这种情况下,大多数情况下不加考虑地使用运算符会导致程序难以阅读和更改。因此,他们尽量在代码中尽量减少它,以免混淆处理逻辑。
正如已经提到的,在很多情况下它反而会有所帮助,但必须深思熟虑和谨慎使用。例如,在遍历三维、四维或多维数组时退出循环的深度嵌套。
尝试在没有标签的情况下重写它,很可能您会得到一个标志、它的设置,以及每次迭代中对标志的三次检查,看起来一般。有时处理逻辑比较复杂。但这样的任务很少见,并且您使用标签的需求很小。一般做法——如果没有标签你能写得更好,最好放弃它们,以免代码混乱。
PS> 与 label 不同,goto 的限制较弱,并且不仅可以在循环内跳转。无论如何,对于这两种情况,上述所有内容仍然有效。
GOTO 很糟糕,因为它破坏了嵌套逻辑级别的逻辑,而硬编码人员无法想象自己没有嵌套。并且该逻辑的嵌套级别越高,代码中 GOTO 的存在就越糟糕。在平面结构上 GOTO 表现出色(汇编器就是由此制成的 - 它称为 JMP)。以上关于 LABEL 的所有描述均正确