A block statement (或 compound statement in other languages) is used to group zero or more statements. The block is delimited by a pair of braces ("curly brackets") and may optionally be labelled :
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
{
StatementList
}
LabelIdentifier: {
StatementList
}
StatementList
Statements grouped within the block statement.
LabelIdentifier
break
.
The block statement is often called compound statement in other languages. It allows you to use multiple statements where JavaScript expects only one statement. Combining statements into blocks is a common practice in JavaScript. The opposite behavior is possible using an empty statement , where you provide no statement, although one is required.
Blocks are commonly used in association with
if...else
and
for
语句。
Variables declared with
var
or created by
函数声明
in non-strict mode
do not
have block scope. Variables introduced within a block are scoped to the containing function or script, and the effects of setting them persist beyond the block itself. In other words, block statements do not introduce a scope. For example:
var x = 1;
{
var x = 2;
}
console.log(x); // logs 2
This logs 2 because the
var x
statement within the block is in the same scope as the
var x
statement before the block.
In non-strict code, function declarations inside blocks behave strangely. Do not use them.
By contrast, identifiers declared with
let
and
const
do have
block scope:
let x = 1;
{
let x = 2;
}
console.log(x); // logs 1
x = 2
is limited in scope to the block in which it was defined.
The same is true of
const
:
const c = 1;
{
const c = 2;
}
console.log(c); // logs 1 and does not throw SyntaxError...
Note that the block-scoped
const c = 2
does not
throw a
SyntaxError: Identifier 'c' has already been declared
because it can be declared uniquely within the block.
在 严格模式 , starting with ES2015, functions inside blocks are scoped to that block. Prior to ES2015, block-level functions were forbidden in strict mode.
| 规范 |
|---|
|
ECMAScript (ECMA-262)
The definition of 'Block statement' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
block
|
Chrome 1 | Edge 12 | Firefox 1 | IE 11 | Opera 3 | Safari 1 | WebView Android 1 | Chrome Android 18 | Firefox Android 4 | Opera Android 10.1 | Safari iOS 1 | Samsung Internet Android 1.0 | nodejs 0.1.100 |
完整支持