2017-02-11 103 views
0

我知道這個問題標題看起來很可怕,但事實並非如此。抱歉!爲什麼人們在某些情況下使用變量?

好吧,那麼,創建一次性/不變的「變量」有什麼意義?

可以說我在Person對象中有一個名爲「name」的屬性。

const Person = { 
    name: 'Luis Felipe Zaguini' 
}; 

好的。所以,看到人們這樣做是非常普遍的:

let personName = Person.name; 
console.log(`I've written my name, and it is ${personName}.`); 

就是這樣。在大多數情況下,該變量只能使用一次。或者,有時它在其他語句中被引用,但是您知道,這是沒用的,因爲有一種方法可以在不設置新變量的情況下引用它。

Tecnically,你是在浪費CPU內存,因爲你可以,事實上,類型Person.name多次,而做到這一點的東西沒用分配內存:

console.log(`I've written my name, and it is ${Person.name}.`); 

而且,你在浪費時間和增加更多的代碼行。我過度了嗎?很多程序員都是這樣做的,但個人來說,它似乎並不適合我。

+2

我看到你來自哪裏,但我已經解決了可讀性在優化之前出現的規則。在JavaScript構建系統(或其他語言)中,您可以依靠這些工具來縮小/優化代碼。除此之外,使用'const'告訴讀者變量不會改變 –

+0

實際上,我可以重新指定Person.name,它會反映personName,但爲了這個問題,我已經改變了。我站在你的身邊,可讀性是一件大事,特別是在調試時。 –

回答

7

有任何數目的原因

  1. A「const`變量將防止意外改變值,例如如果你已經寫了一個closure,它包含一個在直接範圍外可訪問的變量。

  2. JavaScript引擎還不能夠common subexpression elimination,這是一個非常常見的編譯器優化。使用臨時變量可以提高性能,如this example

  3. 有時,具有不同名稱的變量可以闡明功能;見Writing Really Obvious Code (ROC)。例如:

    var activeUsername = User.name; //It's not just a user's name, it's the active user's name! 
    
  4. 有時,額外的變量使得它更容易調試/表變量

  5. 有時你想分配

我是overracting過程中設置單獨的斷點?

是的。

0

我個人不這樣做。但正如你所問,這是我的想法。

const Person = { 
    name: 'Luis Felipe Zaguini' 
}; 
const personName = Person.name; 
personName = personName + " rick"; //As in they want to make some changes to the name but they don't want to change the main object i.e Person 
console.log(`I've written my name, and it is ${personName}.`); 

我個人比較喜歡這樣做。 在這裏,如果您想更改名稱,則必須直接更改主對象。這是有點危險的,因爲你可能會在代碼中的其他地方使用它。

const Person = { 
    name: 'Luis Felipe Zaguini' 
}; 
console.log(`I've written my name, and it is ${Person.name}.`); 
+1

您不能更改常量的引用,但可以更改其屬性。所以如果你聲明'const Person = {name:'Luis'};',那麼你不能重新分配它並且說'Person = {name:'Rick'}'。你可以改變屬性。 'Person.name ='Rick''是有效的。 –

0

這種方法很可能用於緩存值以防止查找。雖然這通常不是問題,但使用點符號或索引數組值會產生一點點的開銷。

開發人員可能選擇這樣做來闡明他們的部分代碼。

最後,開發人員可能只是馬虎。

在所有情況下,可能的好處或副作用都取決於您使用的JavaScript引擎以及它的優化類型。

0

朋友,在這裏你很容易混淆對象屬性和變量。例如,name =「foo」沒有意義,可以直接使用。但是Person.name =「foo」表示具有name屬性值的Person爲foo.C#是關於對象的所有內容,並且總是可以在最終代碼塊中釋放內存。希望我很清楚:)

+1

我認爲你需要重新閱讀這個問題,這與C#有什麼關係? OP不會在對象屬性和正常變量之間混淆自己。 –

0

我想我得到了你的問題。該值存儲在變量中,而不是直接使用,因爲它可以防止多次往返數據庫,或節省解析表達式所用的時間,以防萬一使用多次。例如。在你的情況下,如果你的代碼中有多個refrences,而不是每次解析Person.name,編譯器會傾向於從變量中讀取Person.name。

相關問題