【问题标题】:Javascript variable what is less efficientJavascript变量效率较低
【发布时间】:2017-10-05 10:32:25
【问题描述】:

我目前正在学习 Javascript。我想知道两者之间是否有任何区别:

var factor=0.1;
var limit=10;
var x;
var y;

x= limit*factor;
y= limit*factor;

//or
var limit=10;
var x;
var y;

x=limit *0.1;
y=limit*0.1;

这有什么不同吗(例如在查看性能时)?如果是这样,为什么不一样?第二个例子对我来说看起来不太有希望,因为我一直认为我声明了变量 0.1 两次。提前感谢您的帮助。

【问题讨论】:

  • 在第二个例子中,你没有两次声明“0.1”,第二个会更好。
  • 不要从优化开始。
  • 如果您将 0.1 更改为 0.2,您将需要在所有使用它的地方进行更新。所以第一个版本更好。
  • 内联函数,变量总是性能更好,但可重用性更低
  • 不,没有区别。 JavaScript 引擎应该优化这两个版本。此外,如果有任何差异,可以放心地忽略它。选择更易读的。

标签: javascript performance variables variable-assignment inline


【解决方案1】:

有一个非常很小的差异。当您在两次乘法中使用factor 时,JavaScript 引擎每次都必须在当前词法环境对象中查找factor 的值——无论如何,理论上;如果 JavaScript 引擎选择代码进行优化,那么优化很可能会摆脱这种情况。

但无论如何:当您需要担心性能问题时,请担心性能问题。相反,专注于可读性和可维护性。如果 xy 打算乘以相同的值,则将该值放入某个值(var,或者可能是 ES2015+ 的 const),然后在两个地方都使用它。

【讨论】:

  • 我一直想知道(尽管我知道这是 非常 微小的纳米差异),但是对于 js 引擎来说,获取硬编码值是否比之前在变量中声明的值更难手 ?我的意思是,我总是使用可变方式,因为对我来说它的痛苦更少,而且我不太关心解释器会受到怎样的影响,但是,你的回答并不能准确地说明这个微小的差异是如何产生的。声明的变量更容易清理可能是有道理的,但避免声明某些东西也可以避免清理它的需要也是有道理的。
  • @Kaiido:我不知道 解析器 解析 0.1factor 需要做多少工作。我怀疑有什么真正的区别。但是代码在加载时只被解析一次,之后解析的结果要么被解释要么被编译。因此,如果存在解析差异,则无关紧要,而符号查找则可以。 (就在几个月前,我会说几乎没有 JavaScript 引擎再使用解释器,但最近 V8 回到了解释——字节码级别,如 Java——只用于很少使用的代码。)
  • @TJ Crowder 我明白了,我真的没想到它会被查两次.. 但是第一个例子可读性更高,所以我会考虑 readibilty.. 感谢您的回复!跨度>
  • @samid:好吧,如果应用了 any 优化,它可能不会。 :-)
  • PS:(当然还有可维护性,如果我有很多乘法,第一个会减少对我手指的伤害。
【解决方案2】:

我建议您继续第一个示例,但要进行修改。变量用于保存动态数据,最好将0.1 保存在变量中,这样您可以根据需要随时更改它。

// have a function so that you don't repeat the code
function getFactor(factor, limit) {
  return limit * factor;
}

//declare the variables and set the required default values
var factor = 0.1,
    limit = 10,
    x, y;

//assign getFactor to x and y variables
x = y = getFactor(factor, limit);

【讨论】:

  • 问题必须已经更新,两个例子都使用var
  • @T.J.Crowder zzzz,很遗憾,是的,谢谢...会修改我的答案。
  • @Mr.Alien 我错了,但无论如何感谢您的回答!
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多