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

Spa*_*man 46 javascript

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

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

对我来说,它几乎看起来像一个尝试对象的构造.即

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

但据我所知,它会执行它.

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

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

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

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

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

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

Mic*_*ary 45

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

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

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

添加到这里的幽默,代码似乎缺少var_occurrenceID完全-所以它可能无意间建立了一个全局变量!

你没有花括号重写代码的方式确实是它实际执行的方式.它更好地表示代码实际执行的内容以及代码的编写方式.(var当然修复了失踪......)


小智 10

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

我将在这里做两个假设:

  1. 开发人员并不称职
  2. 你在弯道之间遗漏了很多线

(如果1不成立则所有投注均已关闭)

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


joe*_*son 8

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

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