2015-05-19 58 views
46

所以我最近開始在一個新的就業機會,我已經運行了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獲取刪除,並沒有坐在它的封裝,我們分配一個封裝外的變種。 這實際上是否可以提高性能?即

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

另一個選擇是,它只是不好的代碼?

或者也許它的意思是爲了幫助開發者的代碼的邏輯分離?

我只是想知道,如果有人可以在此提供一些線索,我:)

+3

我猜,有人就喜歡花括號。 :) – CuriousMind

+14

大括號形成[_block statement_](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block)。與其他一些語言不同,JavaScript中的塊不會創建新的作用域(例如,對於變量聲明)。所以這裏的用法似乎對我來說。 –

+0

我不是哈哈,我想刪除它們,但我不想通過刪除它們來破壞它們。 @CuriousMind – Spaceman

回答

45

你是對的質疑那些花括號。他們什麼都不做。大括號內的代碼與大括號不存在時的執行方式相同。這樣做讓他們在那裏顯然是一個錯誤。

正如你所提到的,它看起來像有人可能會認爲大括號會引入一個塊範圍,也許會導致一個變量在大括號關閉後超出範圍。但是JavaScript沒有var變量的塊範圍! (它確實具有let的塊範圍,但僅限於支持let的新JavaScript引擎。)

或者他們只是認爲這是記錄變量使用位置的好方法。不是。

這裏增加了幽默,代碼似乎完全丟失了var對於_occurrenceID - 所以它可能會無意中創建一個全局變量!

您改寫代碼時沒有花括號的方式的確如何實際執行。它更好地代表了代碼實際執行的內容,以及如何編寫代碼。 (當然修復丟失的var ...)

+0

「缺少'var' ...」 - 這可能是有意的,如果他們試圖記錄變量的使用地點。嵌套的意圖,似乎你只能走平行或更深,除非你走向全球 – Izkata

8

據我所知,大括號只是對正在閱讀代碼的開發人員的提示。

我的猜測是大括號和嵌套只是爲了說明該列表包含一個項目,其中包含一個ID。這可能是爲了幫助讀者理解,如果他們編輯任何代碼或移動它,然後編輯內部代碼以匹配。

3

這些大括號只是爲了讓代碼更具可讀性,這是一些程序員的想法。大括號與任何其他功能無關。人們使用有線的代碼。歡呼新的有點經驗。 :-P

+5

應該是「人們做代碼奇怪」,或者你是否暗示原始編碼器是興奮劑高? :) –

+2

LOL我只是分享我的經驗;-P –

10

或者也許它的意思是作爲一個邏輯分離的代碼來幫助開發?

我打算讓2個假設這裏:

  1. 開發商是不是無能
  2. 你留下了很多的花括號

之間的線路(如1不是真的,那麼所有的投注都關閉)

不做任何事情的花括號塊確實有目的 - 在各種文本編輯器中他們標記secti可以摺疊並因此從視線中移除。我經常這樣做,如果我有50多行我知道工作,但我必須不斷滾動過去。在內容周圍放置捲曲(介意嵌套),單擊裝訂線中的「摺疊/摺疊」圖標 - >代碼消失。我特別的編輯會記住摺疊的塊,所以我不需要每次重新摺疊。

+1

代碼是沒有被省略。 必須有一種方法來實現摺疊而不使用會在捆綁時增加文件大小的代碼,即在註釋中。 – Spaceman

1

查看具有編譯器視圖的代碼。

大括號只是定義範圍。別的更多。

考慮一下,這裏是一個例子。

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

此代碼是在默認情況下類似

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

即for循環具有範圍,直到下一個語句。

同樣,

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

這僅僅是限定範圍和添加該範圍內的語句。儘管您在該範圍內聲明瞭變量,但吊裝概念會將所有變量放在頂部。

在範圍內聲明變量就像;

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

http://www.w3schools.com/js/js_hoisting.asp我有一個快速閱讀吊裝的概念。它是一個我不知道存在的有趣功能。我仍然不明白在這種情況下它是如何有用的。 – Spaceman

相關問題