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

所以我最近开始在一个新的就业地点,我已经跑过一个JavaScript的格式,这使我质疑其目的。 (特别是括号{})

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

对我来说,它几乎看起来像一个企图的对象build设。 即

 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得到删除,不坐在其封装,我们分配一个封装外的变种。 这实际上是一个性能改善吗? 即

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

另一个select是,它只是不好的代码?

或者也许它的意思是为了帮助开发者的代码的逻辑分离?

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

你是正确的质疑那些花括号。 他们什么都不做。 大括号内的代码与大括号不在的执行方式相同。 让他们这样做显然是一个错误。

正如你所提到的,看起来有人可能会认为花括号会引入一个块范围,可能会导致一个variables在花括号closures后超出范围。 但JavaScript没有varvariables的块范围! (它有阻止范围let ,但只有在新的JavaScript引擎支持let 。)

也许他们只是认为这将是一个很好的方式来loggingvariables的使用。 不是。

在这里添加幽默,代码似乎完全丢失了_occurrenceID的variables – 所以它可能无意中创build了一个全局variables!

你不用花括号重写代码的方式实际上是如何执行的。 这是代码实际执行的更好的表示,代码应该如何写入。 (修复当然遗漏的变化…)

或者也许它的意思是为了帮助开发者的代码的逻辑分离?

我要在这里做两个假设:

  1. 开发人员不是无能
  2. 你在曲线之间留下了很多线条

(如果1不是真的,那么所有投注都closures)

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

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

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

这些大括号只是为了使代码更具可读性,这是一些程序员的想法。 大括号与任何其他function无关。 人们做有线的代码。 欢呼新的有点经验。 😛

用编译器查看代码。

大括号只是定义范围。 别的更多。

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

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

这只是定义范围,并在该范围内添加语句。 尽pipe你在该范围内声明了variables,但是吊装概念会将所有variables冒泡到最高。

在一个范围内声明variables就像;

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