Block-Anweisung
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Eine Block-Anweisung wird verwendet, um null oder mehr Anweisungen zu gruppieren. Der Block wird durch ein Paar geschweifter Klammern begrenzt und enthält eine Liste von null oder mehr Anweisungen und Deklarationen.
Probieren Sie es aus
var x = 1; let y = 1; if (true) { var x = 2; let y = 2; } console.log(x); // Expected output: 2 console.log(y); // Expected output: 1
Syntax
{ StatementList }
StatementList
-
Anweisungen und Deklarationen, die innerhalb der Block-Anweisung gruppiert sind.
Beschreibung
Die Block-Anweisung wird in anderen Sprachen oft als zusammengesetzte Anweisung bezeichnet. Sie ermöglicht die Verwendung mehrerer Anweisungen, wo JavaScript nur eine Anweisung erwartet. Das Kombinieren von Anweisungen in Blöcke ist eine gängige Praxis in JavaScript, insbesondere im Zusammenhang mit Kontrollflussanweisungen wie if...else
und for
. Das entgegengesetzte Verhalten ist mit einer leeren Anweisung möglich, bei der Sie keine Anweisung angeben, obwohl eine erforderlich ist.
In Kombination mit blockbezogenen Deklarationen wie let
, const
und class
können Blöcke verhindern, dass temporäre Variablen den globalen Namensraum verschmutzen, ähnlich wie IIFEs.
Block-Scope-Regeln mit var oder Funktionsdeklaration im Nicht-Strikt-Modus
Variablen, die mit var
deklariert oder durch Funktionsdeklarationen im Nicht-Strikt-Modus erstellt wurden, haben keinen Block-Scope. Variablen, die innerhalb eines Blocks eingeführt werden, sind in der Funktion oder im Skript, das den Block enthält, lokal, und die Auswirkungen ihrer Einstellung bestehen über den Block hinaus. Zum Beispiel:
var x = 1; { var x = 2; } console.log(x); // 2
Dies gibt 2 aus, da die var x
-Anweisung innerhalb des Blocks im selben Scope wie die var x
-Anweisung vor dem Block ist.
In nicht-striktem Code verhalten sich Funktionsdeklarationen innerhalb von Blöcken merkwürdig. Verwenden Sie sie nicht.
Block-Scope-Regeln mit let, const, class oder Funktionsdeklaration im Strikt-Modus
Im Gegensatz dazu haben Bezeichner, die mit let
, const
und class
deklariert wurden, einen Block-Scope:
let x = 1; { let x = 2; } console.log(x); // 1
Das x = 2
ist im Scope auf den Block beschränkt, in dem es definiert wurde.
Gleiches gilt für const
:
const c = 1; { const c = 2; } console.log(c); // 1; does not throw SyntaxError
Beachten Sie, dass das block-gebundene const c = 2
keinen SyntaxError: Identifier 'c' has already been declared
auslöst, da es innerhalb des Blocks eindeutig deklariert werden kann.
Im Striktmodus sind Funktionsdeklarationen innerhalb von Blöcken auf diesen Block beschränkt und werden an den Anfang des Blocks hochgezogen.
"use strict"; { foo(); // Logs "foo" function foo() { console.log("foo"); } } foo(); // ReferenceError: foo is not defined
Beispiele
Verwendung einer Block-Anweisung als Körper einer for-Schleife
Eine for
-Schleife akzeptiert eine einzelne Anweisung als ihren Körper.
for (let i = 0; i < 10; i++) console.log(i);
Wenn Sie mehr als eine Anweisung im Schleifenkörper verwenden möchten, können Sie sie in einer Block-Anweisung gruppieren:
for (let i = 0; i < 10; i++) { console.log(i); console.log(i ** 2); }
Verwendung einer Block-Anweisung zur Datenkapselung
let
- und const
-Deklarationen sind auf den umschließenden Block beschränkt. Dies ermöglicht es, Daten vor dem globalen Scope zu verbergen, ohne sie in eine Funktion zu verpacken.
let sector; { // These variables are scoped to this block and are not // accessible after the block const angle = Math.PI / 3; const radius = 10; sector = { radius, angle, area: (angle / 2) * radius ** 2, perimeter: 2 * radius + angle * radius, }; } console.log(sector); // { // radius: 10, // angle: 1.0471975511965976, // area: 52.35987755982988, // perimeter: 30.471975511965976 // } console.log(typeof radius); // "undefined"
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-block |