语句和声明
JavaScript 应用程序由具有适当语法的语句组成。单个语句可以跨越多行。如果每个语句都用分号分隔,则多个语句可以出现在同一行上。这并不是一个关键字,而是一组关键字。
按类别划分的语句和声明
如需按字母顺序列出,请参见左侧边栏。
控制流
声明变量
var-
声明一个变量,可选择将其初始化为一个值。
let-
声明一个块作用域局部变量,可选择将其初始化为一个值。
const-
声明一个只读的命名常量。
using-
声明同步处理的局部变量。
await using-
声明异步处理的局部变量。
函数和类
function-
声明一个具有指定参数的函数。
function*-
生成器函数使编写迭代器变得更容易。
async function-
声明一个具有指定参数的异步函数。
async function*-
异步生成器函数使编写异步迭代器变得更容易。
class-
声明一个类。
迭代
do...while-
创建一个循环,执行指定的语句,直到测试条件评估为假。条件在执行语句后评估,导致指定语句至少执行一次。
for-
创建一个循环,该循环由三个可选表达式组成,用括号括起来并用分号分隔,后跟在循环中执行的语句。
for...in-
以任意顺序迭代对象的枚举属性。对于每个不同的属性,可以执行语句。
for...offor await...of-
迭代异步可迭代对象、类数组对象、迭代器和生成器,调用自定义迭代钩子,并执行针对每个不同属性值要执行的语句。
while-
创建一个循环,只要测试条件评估为真,就执行指定的语句。条件在执行语句之前评估。
其他
语句和声明之间的区别
在本节中,我们将混合两种构造:语句和声明。它们是两个不相交的语法集合。以下是声明:
letconstfunctionfunction*async functionasync function*classexport(注意:它只能出现在模块的顶层)import(注意:它只能出现在模块的顶层)
上面列表中的其他所有内容都是语句。
"语句"和"声明"这两个术语在 JavaScript 的正式语法中具有精确的含义,这会影响它们在代码中的位置。例如,在大多数控制流结构中,主体只接受语句——例如 if...else 的两个分支。
if (condition)
statement1;
else
statement2;
如果您使用声明而不是语句,则会引发 SyntaxError。例如,let 声明不是语句,因此您不能在 if 语句的主体中以其裸露形式使用它。
if (condition)
let i = 0; // SyntaxError: Lexical declaration cannot appear in a single-statement context
另一方面,var 是一个语句,所以您可以单独使用它作为 if 主体。
if (condition)
var i = 0;
您可以将声明视为“将标识符绑定到值”,将语句视为“执行操作”。var 是语句而不是声明是一个特例,因为它不遵循正常的词法作用域规则,并且可能产生副作用——以创建全局变量、修改现有 var 定义的变量以及定义在其块外部可见的变量(因为 var 定义的变量不是块作用域的)的形式。
作为另一个例子,标签只能附加到语句。
label: const a = 1; // SyntaxError: Lexical declaration cannot appear in a single-statement context
注意:有一个遗留语法允许函数声明带有标签,但这只是为了与 Web 现实兼容而标准化的。
为了解决这个问题,您可以将声明用大括号括起来——这使得它成为块语句的一部分。
label: {
const a = 1;
}
if (condition) {
let i = 0;
}
浏览器兼容性
加载中…