HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
View in English Always switch to English
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
ブロック文 は 0 個以上の文をグループ化するのに使われます。ブロックは中括弧(「波括弧」)の組で区切られ、0 個以上の文または宣言のリストを含みます。
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
{ StatementList }
StatementList
ブロック文の中でグループ化される文や宣言です。
ブロック文は、他の言語ではよく複合文と呼ばれます。これは複数の文を JavaScript からみて 1 つの文にまとめるために使用します。ブロック内に複数の文をまとめることは、JavaScript では、特に if...else and for などのフロー制御文との関連で良く行われることです。反対の動作は空文を使用することで実現でき、これは 1 つの文が必要な場所に文を置かずにおくことができます。
if...else
for
さらに、let、const、class などのブロックスコープ宣言と組み合わせることで、IIFE のように、一時変数がグローバル名前空間を汚染するのを防ぐことができます。
let
const
class
非厳格モードでは、var の宣言や、関数宣言で作成された変数は、ブロックスコープを持ちません。ブロック内で導入された変数は、それを含んでいる関数またはスクリプトがスコープとなり、変数を設定した効果は、そのブロック自体を超えて持続します。言い換えれば、ブロック文はスコープを作成しません。例えば、
var
var x = 1; { var x = 2; } console.log(x); // 2
これが 2 を出力するのは、ブロックの中の var x 文がブロックより前と同じスコープを持つからです。
var x
非厳格モードでは、ブロック内の関数定義は奇妙な動きをします。使用しないでください。
対照的に、let、const、class で宣言された識別子は、ブロックスコープを持ちます。
let x = 1; { let x = 2; } console.log(x); // 1
この x = 2 は、それが定義されたブロックのスコープに制限されています。
x = 2
同じことが const にも言えます。
const c = 1; { const c = 2; } console.log(c); // 1 が出力され、SyntaxError は発生しない...
ブロックスコープを持つ const c = 2 は、ブロック内で固有に宣言することができるため、SyntaxError: Identifier 'c' has already been declared を発生させないことに注意してください。
const c = 2
SyntaxError: Identifier 'c' has already been declared
厳格モードでは、ブロック内の関数宣言はそのブロックのスコープを持ち、巻き上げられます。
"use strict"; { foo(); // "foo" と出力 function foo() { console.log("foo"); } } foo(); // ReferenceError: foo is not defined
for ループは本体として単一の文を受け入れます。
for (let i = 0; i < 10; i++) console.log(i);
ループ本体で複数の文を使用したい場合は、1 つのブロック文にまとめることができます。
for (let i = 0; i < 10; i++) { console.log(i); console.log(i ** 2); }
let と const の宣言は、それを含むブロックのスコープになります。これにより、データを関数で包むことなく、グローバルスコープから隠すことができます。
let sector; { // これらの変数はこのブロックのスコープであり、 // ブロックの後でアクセスすることはできません。 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"
Enable JavaScript to view this browser compatibility table.
while