关于注释掉废话代码的疑问

思否 问答 👍 2 含 AI 优化版

问题

关于注释掉废话代码的疑问

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

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

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。