关于注释掉废话代码的疑问
思否 问答 👍 2 含 AI 优化版
问题
关于注释掉废话代码的疑问
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
把 for 循环体里的部分代码注释掉之后,发现循环的执行结果和预期不一样,好像循环体的范围变了。
涉及技术
JavaScript for 循环、代码块 {}
期望结果
理解注释掉代码后循环体范围发生变化的原因,并知道如何修正。
回答
原始回答
2021-11-06 加个括号 {} 。现在,for 循环只循环了 console
AI 优化 · 回答整理
解答思路
for 循环如果没有用 {} 包裹循环体,默认只会把紧跟着的下一条语句当作循环体;一旦把这条语句注释掉了,实际的循环体就变成了原本以为在循环外的下一行代码。
示例代码
// 容易踩坑的写法:没有花括号,循环体只包含一条语句
for (let i = 0; i < 10; i++)
// doSomething(); // 被注释掉之后,下面这行反而变成了循环体
console.log(i);
修正方式:无论循环体有几条语句,都显式加上 {}:
for (let i = 0; i < 10; i++) {
// doSomething();
console.log(i);
}
详细说明
- JS(以及 C 系语言)中
for/if/while等语句在没有{}时,只会把紧接着的一条语句纳入控制范围。 - 当注释掉了原本紧跟在
for后面的那一条语句,解释器会自动把下一条未注释的语句当作循环体,导致行为和预期(循环体是原来那一大段代码)完全不同。 - 这是经典的隐藏 bug 来源,很多团队的代码规范会强制要求所有控制语句都必须加
{},即使循环体/条件体只有一行,也是为了从根源上避免这种问题。
小结
省略 {} 的控制语句只会把下一条语句纳入范围;养成给所有 for/if/while 加花括号的习惯,可以避免注释代码时引发的隐蔽 bug。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault