没有函数或json的JavaScript花括号

没有函数或json的JavaScript花括号,javascript,Javascript,刚刚打开了一个客户端的javascript文件,第一行如下所示: { var s_account="blog"; } 我不明白。通常,根据我的经验,花括号环绕函数 function welcome(){ ... …或json JavaScript对象 有谁能告诉我为什么有大括号,前后都没有文字?它做什么/它的意义是什么?它被称为a。它允许您对表达式进行分组。它通常与if和while等控制结构一起使用,但也可以单独使用 因为JavaScript没有块作用域,所以代码在相同的作用域中运行

刚刚打开了一个客户端的javascript文件,第一行如下所示:

{
    var s_account="blog";
}
我不明白。通常,根据我的经验,花括号环绕函数

function welcome(){ ...
…或json JavaScript对象

有谁能告诉我为什么有大括号,前后都没有文字?它做什么/它的意义是什么?

它被称为a。它允许您对表达式进行分组。它通常与
if
while
等控制结构一起使用,但也可以单独使用

因为JavaScript没有块作用域,所以代码在相同的作用域中运行(就好像
{}
不存在一样)

例如:

{
    var s_account="blog";
}

console.log(s_account);
那很好

有谁能告诉我为什么有大括号,前后都没有文字?它有什么作用/它有什么意义

在Javascript中,它们没有什么意义。它的行为将完全相同,就像代码只是

var  s_account="blog";
投机 在其他具有块作用域的语言中,这可能会限制变量的作用域,但由于JS没有该功能(无论是好是坏),没有控制结构或函数的大括号基本上是没有意义的,并且会被忽略


然而,这段代码很可能是删除的函数或if语句留下的。它肯定不是要复制的模式。

它是一个块,完全没有意义,除非您标记它:

块:{
var s_account=“blog”;
控制台日志(“已执行”);
断块;
控制台日志(“未执行”);

}
在我看来,这样做的唯一逻辑原因是作为一种组织技术

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();
    };
}

此外,大多数IDE将允许您折叠“私有成员”块并将其清除

这是块语句。块语句有多种用途,这些用途都没有被代码使用(除了可能将内容分组在一起)。(事实上,我要说的是,在那段代码中,它们的效果适得其反,因为对于许多从所有变量声明都是块作用域的语言学习JavaScript的人来说,它们给人的印象是变量的作用域是块,而不是块。)

它可以有:

作用域
let
const
class
如果该代码使用的是
let
const
class
,则块将限定结果标识符的范围,因为
let
const
class
在JavaScript中限定了块的范围。因此,这将输出
“bar”

{
var foo=“bar”;
}
console.log(foo)快速添加。
在某些类似IDE的可视代码中,使用大括号实际上会创建一个带有“下拉”箭头的可视块,只需单击即可完全隐藏部分代码。
它有助于代码组织。
我在使用大量CSS创建HTML元素时使用它。


因为它不会影响代码执行,这是非常有用的。

这不是“JSON对象”,而是“JavaScript对象”。我能找到的那些大括号的唯一原因是不好的原因……可能是写它的人认为JavaScript有块作用域(它没有)并试图缩小
s_account
@RocketHazmat的范围,这甚至不是一个JavaScript对象。这只是一个块。@FlorianMargaine我认为rocket指的是“或json对象变量属性”,只是它不允许在函数声明中声明…请阅读函数声明说明,因为…尝试在声明上方的FF中调用它,它将失败。@RocketHazmat“JavaScript没有块范围”-在版本中,您可以使用
break
s这样的功能?@RocketHazmat是的,只需在控制台上运行即可。或者添加条件中断,并在条件为false时看到警报执行。我从未使用过标签。那么,它的行为是否像一个“转到”?@RocketHazmat是的,它转到标记块的末尾。这真的很有帮助。我们还能用积木做什么?我猜我们可以把它们当作迷你开关或迷你函数来处理?嘿,这是一个非常好的观点,特别是关于IDE中可折叠的一面。奇怪的是,这里面只有一个变量。。。我的另一个想法可能是它生成的代码。当使用约定时,变量的数量应该并不重要。如果你打算使用约定,你应该一直使用它。现在我们有了let和const的block scope,这在某些场景中可能会很有用。代码的作用完全相同。这并不意味着它毫无意义。按照你的逻辑,换行符是没有意义的吗?JS中有一半的分号是没有意义的吗?评论是否毫无意义?正如人们在下面指出的,IDE和许多文本编辑器允许您折叠块语句。它们允许您用不仅仅是空格来分割代码-当有有效答案时,非答案为1。我认为你的
let foo=“bar”示例仍然记录
@Djave-试试看,这是一个可运行的代码片段。:-)它记录
“bar”
的唯一方法是,如果JavaScript引擎的
let
实现已损坏。我不知道有谁是那样坏的。(IE9有一个过时的
let
实现,它失败了与
for
循环相关的重要用例,但是IE9不允许
let
在块中,所以它不会记录上面的
“bar”
。[我不确定,所以我尝试了它。:-])啊哈。。。我知道我做了什么。。。我复制并粘贴到终端上。。。因此,第二个
console.log
记录了
var
facepalm@Djave-哈哈!是的,这就解释了-D
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();
    };
}