2017-02-11 183 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。

相关问题