六维教程

JavaScript 基本语法与注释

学会了把代码放进页面,现在开始学 JavaScript 本身的规矩。语法是语言的书写规则,注释是给代码写的说明。这一篇篇幅不长,但基础是否扎实,很大程度上取决于对语法的认真程度。

语句与分号

语句是 JavaScript 里一条完整的命令,比如给变量赋值、调用一个函数,都算一条语句。

const name = '小明';
console.log(name);

分号表示一条语句的结束,上面的例子每条语句结尾都有分号。

JavaScript 有个机制叫自动分号插入(ASI),分号缺了时引擎会尝试自动补上。这个机制大多数时候很聪明,但有时候会好心办坏事。看下面的例子

function getValue() {
  return
  42;
}

return 后换行了,ASI 会在 return 后面补一个分号,结果是函数返回 undefined 而不是 42。写代码的人以为是返回 42,实际返回了 undefined,这种 bug 极难发现。

再比如两行都以括号开头的语句,也可能被误判为同一句。为了避免这类意外,建议每条语句结尾显式加分号,风格保持统一。虽然有没有分号程序通常都能跑,但显式分号让代码的行为一目了然。

严格模式 ‘use strict’

严格模式是 ES5 引入的一种运行模式,在脚本或函数开头写一行 ‘use strict’ 即可开启。开启后,引擎会启用更严格的检查,把一些容易出错的写法直接变成报错,提前暴露问题。

最典型的例子是给未声明的变量赋值。非严格模式下,这样写会悄悄创建一个全局变量,很难察觉。严格模式下直接报错

'use strict';
name = '小明';
// 报错,name 未声明,严格模式不允许隐式创建全局变量

写成 const name = ‘小明’ 就完全没问题。严格模式还能拦截一些其它危险操作,这里不展开,记住一个原则,写代码时默认开启严格模式,把错误扼杀在摇篮里。教程示例统一不写,是为了保持示例简洁。

注释

注释是写给程序员看的说明,浏览器会完全忽略注释内容。JavaScript 有两种注释,单行注释和多行注释。

// 这是单行注释,两个斜杠开头
const name = '小明';

/*
  这是多行注释,
  适合写比较长的说明。
*/
const age = 18;

注释的作用包括

  • 解释意图。说明这段代码为什么要这么写,尤其是不直观的地方。
  • 临时禁用代码。把代码注释掉而不是删除,调试时可以随时恢复。

注释不是越多越好,废话注释反而增加噪音。好的注释应该解释”为什么”,而不是复述”是什么”。代码本身能表达的内容,不需要再写一遍注释。

代码风格与可读性

代码是写给人看的,顺便给机器运行。风格统一、可读性高的代码,自己三个月后回来看也毫不费力。几个基本约定

  • 缩进统一。本教程用 2 空格缩进,嵌套一层多缩进一层。
  • 语句之间适当空行。把逻辑相关的代码分块,视觉上容易区分。
  • 命名语义化。变量名表达清楚含义,用 name、age 而不是 a、b。
  • 命名风格统一。变量和函数名用 camelCase 驼峰命名法,第一个单词小写,后续单词首字母大写,比如 userName、getUserList。

看一个对比。下面的代码功能相同,右边明显更清晰

// 不推荐的写法
const n = 5;
let s = 0;
for (let i = 1; i <= n; i++) {
  s = s + i;
}
console.log(s);
// 推荐的写法
const maxNumber = 5;
let sum = 0;
for (let i = 1; i <= maxNumber; i++) {
  sum = sum + i;
}
console.log(sum);

代码风格没有绝对的对错,但一旦选定就要坚持。团队项目里,风格统一本身就是规范。

小结

  • 语句是一条完整的命令,分号表示语句结束。
  • 自动分号插入(ASI)可能引发意外行为,比如 return 后换行返回 undefined,建议显式加分号。
  • ‘use strict’ 开启严格模式,给未声明的变量赋值会直接报错,能提前暴露常见错误。
  • 单行注释 // 和多行注释 /* */,用于解释意图和临时禁用代码。
  • 保持缩进统一、命名语义化、使用 camelCase,代码可读性会大幅提升。
上一篇
JavaScript 引入方式
下一篇
JavaScript 变量声明 let 与 const