Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Blockanweisung
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
EineBlockanweisung 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.
In diesem Artikel
Probieren Sie es aus
var x = 1;let y = 1;if (true) { var x = 2; let y = 2;}console.log(x);// Expected output: 2console.log(y);// Expected output: 1Syntax
{ StatementList}StatementListAnweisungen und Deklarationen, die innerhalb der Blockanweisung gruppiert sind.
Beschreibung
Die Blockanweisung wird in anderen Sprachen oft alszusammengesetzte Anweisung bezeichnet. Sie ermöglicht es Ihnen, mehrere Anweisungen dort zu verwenden, wo JavaScript nur eine Anweisung erwartet. Das Kombinieren von Anweisungen zu Blöcken ist eine gängige Praxis in JavaScript, insbesondere in Verbindung mit Kontrollflussanweisungen wieif...else undfor. Das entgegengesetzte Verhalten ist durch die Verwendung einerleeren Anweisung möglich, bei der Sie keine Anweisung bereitstellen, obwohl eine erforderlich ist.
Darüber hinaus können Blöcke in Kombination mit blockweise deklarierten Variablen wielet,const undclass verhindern, dass temporäre Variablen den globalen Namensraum verschmutzen, ähnlich wieIIFEs.
Block-Scope-Regeln mit var oder Funktionsdeklaration im Nicht-Strict-Modus
Variablen, die mitvar deklariert werden oder durchFunktionsdeklarationen im Nicht-Strict-Modus erstellt werden, habenkeinen Block-Scope. Im Block eingeführte Variablen sind im Gültigkeitsbereich der enthaltenen Funktion oder des Skripts, und die Auswirkungen ihrer Zuweisung bestehen über den Block hinaus. Zum Beispiel:
var x = 1;{ var x = 2;}console.log(x); // 2Dies gibt 2 aus, weil dievar x-Anweisung innerhalb des Blocks im gleichen Gültigkeitsbereich wie dievar x-Anweisung vor dem Block liegt.
In Nicht-Strict-Code verhalten sich Funktionsdeklarationen innerhalb von Blöcken merkwürdig. Verwenden Sie sie nicht.
Block-Scope-Regeln mit let, const, class oder Funktionsdeklaration im Strict-Modus
Im Gegensatz dazu haben Bezeichner, die mitlet,const undclass deklariert werden, Block-Scope:
let x = 1;{ let x = 2;}console.log(x); // 1Dasx = 2 ist im Gültigkeitsbereich auf den Block begrenzt, in dem es definiert wurde.
Das Gleiche gilt fürconst:
const c = 1;{ const c = 2;}console.log(c); // 1; does not throw SyntaxErrorBeachten Sie, dass das blocklokalisierteconst c = 2keinenSyntaxError: Identifier 'c' has already been declared auslöst, da es eindeutig innerhalb des Blocks deklariert werden kann.
ImStrict-Modus sind Funktionsdeklarationen innerhalb von Blöcken auf diesen Block beschränkt und werden an die Spitze des Blocks hochgehoben.
"use strict";{ foo(); // Logs "foo" function foo() { console.log("foo"); }}foo(); // ReferenceError: foo is not definedBeispiele
>Verwenden einer Blockanweisung als Körper einer for-Schleife
Einefor-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 eine Blockanweisung gruppieren:
for (let i = 0; i < 10; i++) { console.log(i); console.log(i ** 2);}Verwenden einer Blockanweisung zur Datenkapselung
let- undconst-Deklarationen sind auf den enthaltenen Block beschränkt. Dadurch können Sie Daten vor dem globalen Gültigkeitsbereich verbergen, ohne sie in eine Funktion zu kapseln.
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"using-Deklarationen in einem Block
Sie können Variablen mitusing oderawait using in einem Block deklarieren, was bewirkt, dass das in der Variable gespeicherte Objekt beim Verlassen des Blocks entsorgt wird. Für weitere Informationen sieheRessourcenverwaltung.
{ using reader1 = stream1.getReader(); using reader2 = stream2.getReader(); // do something with reader1 and reader2 // Before we exit the block, reader1 and reader2 are automatically released}Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-block> |