語句和宣告
JavaScript 應用程式由具有適當語法的語句組成。單個語句可以跨越多行。如果每個語句都用分號分隔,則多個語句可以出現在同一行上。這並不是一個關鍵字,而是一組關鍵字。
按類別劃分的語句和宣告
如需按字母順序列出,請參見左側邊欄。
控制流
宣告變數
var-
宣告一個變數,可選擇將其初始化為一個值。
let-
宣告一個塊作用域區域性變數,可選擇將其初始化為一個值。
const-
宣告一個只讀的命名常量。
using-
宣告同步處理的區域性變數。
await using-
宣告非同步處理的區域性變數。
函式和類
function-
宣告一個具有指定引數的函式。
function*-
生成器函式使編寫迭代器變得更容易。
async function-
宣告一個具有指定引數的非同步函式。
async function*-
非同步生成器函式使編寫非同步迭代器變得更容易。
class-
宣告一個類。
迭代
do...while-
建立一個迴圈,執行指定的語句,直到測試條件評估為假。條件在執行語句後評估,導致指定語句至少執行一次。
for-
建立一個迴圈,該迴圈由三個可選表示式組成,用括號括起來並用分號分隔,後跟在迴圈中執行的語句。
for...in-
以任意順序迭代物件的列舉屬性。對於每個不同的屬性,可以執行語句。
for...offor await...of-
迭代非同步可迭代物件、類陣列物件、迭代器和生成器,呼叫自定義迭代鉤子,並執行針對每個不同屬性值要執行的語句。
while-
建立一個迴圈,只要測試條件評估為真,就執行指定的語句。條件在執行語句之前評估。
其他
- 空
-
空語句用於在 JavaScript 語法預期有語句時提供一個空語句。
- 塊(Block)
-
塊語句用於將零個或多個語句分組。塊由一對花括號分隔。
- 表示式語句
-
表示式語句評估一個表示式並丟棄其結果。它允許表示式執行副作用,例如執行函式或更新變數。
debugger-
呼叫任何可用的除錯功能。如果沒有可用的除錯功能,此語句不產生任何效果。
export-
用於匯出函式,使其可供外部模組和其他指令碼匯入。
import-
用於匯入從外部模組、另一個指令碼匯出的函式。
- label
-
為語句提供一個識別符號,您可以使用
break或continue語句引用該識別符號。 with已棄用-
擴充套件語句的作用域鏈。
語句和宣告之間的區別
在本節中,我們將混合兩種構造:語句和宣告。它們是兩個不相交的語法集合。以下是宣告:
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;
}
瀏覽器相容性
載入中…