没有函数或json的JavaScript花括号

时间:2013-08-08 15:27:14

标签: javascript

刚刚打开了客户端的javascript文件,第一行就是这样:

{
    var s_account="blog";
}

我没有得到。通常,根据我的经验,花括号缠绕一个函数......

function welcome(){ ...

...或 json JavaScript 对象

var attributes = { this : "that...

有谁能告诉我为什么在他们之前或之后没有文字的花括号?它做了什么/有什么意义呢?

6 个答案:

答案 0 :(得分:12)

除非你给它贴上标签,否则它就是一块并且毫无意义:

block: {
    var s_account="blog";
    break block;
    alert("not executed");
}

答案 1 :(得分:7)

  

有谁能告诉我为什么在他们之前或之后没有文字的花括号?它做了什么/有什么意义呢?

在Javascript中没有重要的意义。它的行为与代码只是

完全相同
var  s_account="blog";
推测

在具有块范围的其他语言中,这可能会限制变量的范围,但由于JS没有该功能(无论好坏),没有控制结构或功能的大括号基本上没有意义并被忽略。 / p>

很可能这段代码是从已删除的函数或if语句中遗留下来的。它绝对不是一种可以复制的模式。

答案 2 :(得分:7)

在我看来,做这样的事情的唯一合乎逻辑的理由是作为一种组织技术。

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都允许您折叠“私有成员”阻止并将其排除在外。

答案 3 :(得分:6)

它被称为block statement。它允许您分组表达式。它通常与ifwhile等控制结构一起使用,但也可以单独使用。

由于JavaScript没有块范围,因此代码在相同的范围内运行(就好像{}不存在一样)。

示例:

{
    var s_account="blog";
}

console.log(s_account);

工作正常。

答案 4 :(得分:3)

这是一个封锁声明。块语句具有多个目的,该代码没有使用任何目的(除了可能将内容分组在一起as Shmiddty suggested之外)。 (实际上,我会在该代码中说,它们起了反作用,因为对于许多使用所有变量声明都以块为范围的语言来使用JavaScript的人来说,他们给人的印象是变量的作用域是块,不是。)

使用它可以具有:

确定letconstclass的范围

如果该代码使用的是letconstclass,则该块将确定结果标识符的范围,因为letconst和{{ 1}} 在JavaScript中具有作用域范围。因此输出class

"bar"

但这会引发{ var foo = "bar"; } console.log(foo);,因为ReferenceError的作用域是该块:

foo

提供要打破的障碍

Esailija points out一样,如果它被标记并使用{ let foo = "bar"; } console.log(foo);,则中断将尽早退出该块。

附加到流控制语句的分组语句

block语句的最常见用法是将附加到流控制语句的语句(例如breakif)组合在一起。在这个非常典型的for中:

if

... if (something) { doThis(); doThat(); } 不是{}的部分(您可以不使用if来编写if),它们是重新附加到{}上的阻止语句。

答案 5 :(得分:0)

快速添加。 在诸如Visual Code之类的IDE中,放置花括号实际上会创建带有“下拉”箭头的可视块,从而使您只需单击即可完全隐藏部分代码。 它有助于代码组织。 在使用大量CSS创建HTML元素时会使用它。 由于它不影响代码执行,因此非常有用。