刚打开一个客户端的javascript文件,第一行是这样的:
{
var s_account="blog";
}
Run Code Online (Sandbox Code Playgroud)
我没有得到.通常,根据我的经验,花括号缠绕一个函数...
function welcome(){ ...
Run Code Online (Sandbox Code Playgroud)
......或者 JSON JavaScript对象
var attributes = { this : "that...
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么在他们之前或之后没有文字的花括号?它做了什么/有什么意义呢?
Esa*_*ija 13
它是一个块,除非你标记它,否则完全没有意义:
block: {
var s_account="blog";
console.log("executed");
break block;
console.log("not executed");
}Run Code Online (Sandbox Code Playgroud)
在我看来,做这样的事情的唯一合乎逻辑的理由是作为一种组织技术.
function banana(){
// private members
{
var foo = "foo",
bar = "bar",
baz = "baz";
function bux(){
console.log("bux");
}
}
// public members
this.fin = "fin";
this.fang = "fang";
this.foom = "foom";
this.shamalamadingdong = function(){
bux();
};
}
Run Code Online (Sandbox Code Playgroud)
此外,大多数IDE将允许您折叠"私有成员"阻止并使其脱离您的方式.
任何人都可以告诉我为什么在他们之前或之后没有文字的花括号?它做了什么/有什么意义呢?
在Javascript中没有重要的意义.它的行为与代码完全相同
var s_account="blog";
Run Code Online (Sandbox Code Playgroud)
推测
在具有块范围的其他语言中,这可能会限制变量的范围,但由于JS没有该功能(无论好坏),没有控制结构或功能的大括号基本上没有意义并被忽略.
很可能这段代码是从已删除的函数或if语句中遗留下来的.它绝对不是一个可以复制的模式.
那是块语句。块语句有多种用途,该代码没有使用任何一种用途(除了可能像 Shmiddty 建议的那样将内容组合在一起)。(事实上,我想在那段代码中说它们适得其反,因为对于许多从所有变量声明都是块范围的语言来使用 JavaScript 的人来说,他们给人的印象是变量的范围是块,它不是。)
它可以有以下用途:
let, const, 和class如果代码使用let,const或者class,块范围将所得到的识别符,因为let,const和class 被块作用域在JavaScript。所以这输出"bar":
{
var foo = "bar";
}
console.log(foo);Run Code Online (Sandbox Code Playgroud)
但这会抛出一个ReferenceError因为foo范围为块:
{
let foo = "bar";
}
console.log(foo);Run Code Online (Sandbox Code Playgroud)
正如Esailija 指出的那样,如果它被标记并使用break,则中断将提前退出块。
块语句最常见的用途是将附加到流控制语句(如if和 )的语句组合在一起for。在这个相当典型的if:
if (something) {
doThis();
doThat();
}
Run Code Online (Sandbox Code Playgroud)
......该{}不是一部分的if(你可以写if不使用{}),他们是一个块语句连接到的if。
它被称为块语句.它允许您分组表达式.它通常与像控制结构使用if和while,但也可单独使用.
由于JavaScript没有块范围,因此代码在相同的范围内运行(就好像{}它们不在那里).
例:
{
var s_account="blog";
}
console.log(s_account);
Run Code Online (Sandbox Code Playgroud)
这很好.