所以我最近在一个新的工作场所开始,我遇到了一种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?
我只是想知道是否有人可以为我阐明这一点:)
答案 0 :(得分:45)
你对那些花括号的问题是对的。他们什么都不做。大括号内部的代码执行与在大括号不存在时执行的代码相同。将它们放在那里显然是一个错误。
正如你所提到的,看起来有人会想到花括号会引入一个块范围,可能会导致一个变量在括号关闭后超出范围。但JavaScript没有var
变量的块范围! (它确实具有let
的块范围,但仅限于支持let
的较新JavaScript引擎。)
或许他们只是认为这是记录变量使用位置的好方法。不是。
在这里添加幽默,代码似乎完全缺少var
的{{1}} - 所以它可能无意中创建了一个全局变量!
你在没有大括号的情况下重写代码的方式确实是它实际执行的方式。它更好地表示代码实际执行的内容以及代码的编写方式。 (当然修复了丢失的_occurrenceID
...)
答案 1 :(得分:10)
或者它可能意味着代码的逻辑分离以帮助dev?
我将在这里做两个假设:
(如果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;
}
}