这些多余的花括号的目的是什么?

时间:2015-05-19 05:41:54

标签: javascript

所以我最近在一个新的工作场所开始,我遇到了一种javascript格式,让我质疑它的目的。 (特别是括号{})

var _occurrences = getOccurrences($('#ddlTours').val());
{
    var _occurrence = getObjectByValue(_occurrences, 'tourID', booking.tourID);
    {
        _occurrenceID = _occurrence.occurrenceID;
    }
}

对我而言,它几乎看起来像是一个尝试过的物体构造。即。

var _occurrences : // Ignoring = getOccurrences($('#ddlTours').val());
{
    _occurrence : // Ignoring getObjectByValue(_occurrences, 'tourID', booking.tourID);
    {
        _occurrenceID : _occurrence.occurrenceID;
    }
}

但据我所知,它会像执行它一样执行。

var _occurrences = getOccurrences($('#ddlTours').val());
var _occurrence = getObjectByValue(_occurrences, 'tourID', booking.tourID);
_occurrenceID = _occurrence.occurrenceID;

或者它是如此_occurrence得到删除并且不会被封装,我们分配一个在封装之外的var。 这实际上是否可以改善绩效?即。

Global var a = 1
{
    b = someFunction()  // After execution because of encapsulation it poofs???
    for(var c in b)
    {
        a += c.somefunction()
    }
}

另一种选择是它的代码不好吗?

或者它可能意味着代码的逻辑分离以帮助dev?

我只是想知道是否有人可以为我阐明这一点:)

5 个答案:

答案 0 :(得分:45)

你对那些花括号的问题是对的。他们什么都不做。大括号内部的代码执行与在大括号不存在时执行的代码相同。将它们放在那里显然是一个错误。

正如你所提到的,看起来有人会想到花括号会引入一个块范围,可能会导致一个变量在括号关闭后超出范围。但JavaScript没有var变量的块范围! (它确实具有let的块范围,但仅限于支持let的较新JavaScript引擎。)

或许他们只是认为这是记录变量使用位置的好方法。不是。

在这里添加幽默,代码似乎完全缺少var的{​​{1}} - 所以它可能无意中创建了一个全局变量!

你在没有大括号的情况下重写代码的方式确实是它实际执行的方式。它更好地表示代码实际执行的内容以及代码的编写方式。 (当然修复了丢失的_occurrenceID ...)

答案 1 :(得分:10)

  

或者它可能意味着代码的逻辑分离以帮助dev?

我将在这里做两个假设:

  1. 开发人员并不称职
  2. 你在曲线之间遗漏了很多行
  3. (如果1不成立则所有投注均已关闭)

    没有任何卷曲括号块确实有目的 - 在各种文本编辑器中,它们标记可以折叠并因此从视线中移除的部分。我经常这样做,如果我有50多行我知道工作,但我必须经常滚动过去。在内容周围放置curlies(注意嵌套),单击装订线中的“折叠/折叠”图标 - >代码消失了。我的特定编辑会记住折叠的块,所以我不需要每次都重新折叠。

答案 2 :(得分:8)

据我所知,大括号只是对正在阅读代码的开发人员的暗示。

我的猜测是括号和嵌套只是为了说明列表中包含一个包含id的项目。这可能是为了帮助读者理解,如果他们编辑任何代码或移动它,那么也要编辑内部代码以匹配。

答案 3 :(得分:3)

这些大括号只是为了使代码更具可读性,这是一些程序员的想法。大括号与任何其他功能无关。人们做有线编码。为新的体验喝彩。 :-P

答案 4 :(得分:1)

  

使用编译器视图查看代码。

圆括号仅用于定义范围。不是更多。

考虑一下,这是一个例子。

for(var c in b)
{
    a += c.somefunction();
}

此代码与

类似
for(var c in b)
    a += c.somefunction();

即。默认情况下,循环具有范围,直到下一个语句。

同样,

var _occurrences = getOccurrences($('#ddlTours').val());
{
    var _occurrence = getObjectByValue(_occurrences, 'tourID', booking.tourID);
    {
        _occurrenceID = _occurrence.occurrenceID;
    }
}

这只是定义范围并在该范围内添加语句。虽然您在该范围内声明了变量,但是Hoisting概念会将所有变量冒泡到顶部。

在范围内声明变量就像;

if(true){
 var _occurrence = getObjectByValue(_occurrences, 'tourID', booking.tourID);
}

简单来说,

var _occurrences = getOccurrences($('#ddlTours').val());
{
    var _occurrence = getObjectByValue(_occurrences, 'tourID', booking.tourID);
    {
        _occurrenceID = _occurrence.occurrenceID;
    }
}

等于:

var _occurrences = getOccurrences($('#ddlTours').val());
if(true){
    var _occurrence = getObjectByValue(_occurrences, 'tourID', booking.tourID);
    if(true){
        _occurrenceID = _occurrence.occurrenceID;
    }
}