Block Statement

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.

Ein Block-Statement wird verwendet, um null oder mehr Anweisungen zu gruppieren. Der Block wird durch ein Paar geschweifte Klammern begrenzt und enthält eine Liste von null oder mehr Anweisungen und Deklarationen.

Probieren Sie es aus

Syntax

js
{
  StatementList
}
StatementList

Anweisungen und Deklarationen, die innerhalb des Block-Statements gruppiert sind.

Beschreibung

Das Block-Statement wird in anderen Sprachen oft als compound statement bezeichnet. Es ermöglicht Ihnen, mehrere Anweisungen zu verwenden, wo JavaScript nur eine einzige Anweisung erwartet. Das Kombinieren von Anweisungen in Blöcken ist eine gängige Praxis in JavaScript, insbesondere in Verbindung mit Kontrollflussanweisungen wie if...else und for. Das gegenteilige Verhalten ist mit einer leeren Anweisung möglich, bei der keine Anweisung angegeben wird, obwohl eine erforderlich ist.

Zusätzlich können Blöcke in Kombination mit Block-Scoped-Deklarationen wie let, const und class temporäre Variablen davon abhalten, den globalen Namensraum zu verschmutzen, ähnlich wie IIFEs es tun.

Block-Scoping-Regeln mit var oder Funktionsdeklaration im Nicht-Strict-Modus

Variablen, die mit var deklariert oder durch Funktionsdeklarationen im Nicht-Strict-Modus erstellt werden, haben keinen Block-Gültigkeitsbereich. Variablen, die innerhalb eines Blocks eingeführt werden, sind auf die umgebende Funktion oder das Skript beschränkt, und die Auswirkungen ihrer Zuweisung bleiben auch außerhalb des Blocks bestehen. Zum Beispiel:

js
var x = 1;
{
  var x = 2;
}
console.log(x); // 2

Dies gibt 2 aus, da die var x-Anweisung innerhalb des Blocks im gleichen Gültigkeitsbereich wie die var x-Anweisung vor dem Block ist.

In Nicht-Strict-Code verhalten sich Funktionsdeklarationen innerhalb von Blöcken merkwürdig. Verwenden Sie sie nicht.

Block-Scoping-Regeln mit let, const, class oder Funktionsdeklaration im Strict-Modus

Im Gegensatz dazu haben mit let, const und class deklarierte Bezeichner Block-Gültigkeitsbereich:

js
let x = 1;
{
  let x = 2;
}
console.log(x); // 1

Die x = 2 ist auf den Block beschränkt, in dem sie definiert wurde.

Dasselbe gilt für const:

js
const c = 1;
{
  const c = 2;
}
console.log(c); // 1; does not throw SyntaxError

Beachten Sie, dass der Block-Scoped const c = 2 keinen SyntaxError: Identifier 'c' has already been declared wirft, da er innerhalb des Blocks eindeutig deklariert werden kann.

Im Strict-Modus sind Funktionsdeklarationen innerhalb von Blöcken auf diesen Block beschränkt und werden am Anfang des Blocks hochgezogen.

js
"use strict";

{
  foo(); // Logs "foo"
  function foo() {
    console.log("foo");
  }
}

foo(); // ReferenceError: foo is not defined

Beispiele

Verwendung eines Block-Statements als Körper einer for-Schleife

Eine for-Schleife akzeptiert eine einzelne Anweisung als ihren Körper.

js
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 einem Block-Statement gruppieren:

js
for (let i = 0; i < 10; i++) {
  console.log(i);
  console.log(i ** 2);
}

Verwendung eines Block-Statements zur Datenkapselung

let- und const-Deklarationen sind auf den umgebenden Block beschränkt. Dies ermöglicht es Ihnen, Daten vor dem globalen Gültigkeitsbereich zu verbergen, ohne sie in eine Funktion einzubetten.

js
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 Language Specification
# sec-block

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch