Javascript “有什么理由吗?”;“储蓄”;变量?

Javascript “有什么理由吗?”;“储蓄”;变量?,javascript,design-patterns,Javascript,Design Patterns,我有一个同事曾经写过的函数: setSentence: function (e) { this.setState({ issueText: e.target.value }); if (this.refs.messages.textContent.length > 0 && e.target.value.length > 2) { this.refs.messages.textContent = ''; } }, 他在代码中的两个位

我有一个同事曾经写过的函数:

setSentence: function (e) {
  this.setState({
    issueText: e.target.value
  });

  if (this.refs.messages.textContent.length > 0 && e.target.value.length > 2) {
    this.refs.messages.textContent = '';
  }
},
他在代码中的两个位置使用e.target.value。我倾向于这样做:

let textBoxContent = e.target.value;
然后改用更具描述性名称的变量

我曾经和他谈过这些事情。他只是说他想“保存变量”

想更改这些代码,但我仍然不确定

因此,我的问题是:

分别在代码中避免变量的“保存变量”有意义吗?

反复重复冗长的代码时“保存变量”是不经济的。对我来说,这绝对属于一类

Javascript解释器非常适合快速访问局部变量。当一个变量被引用时,第一个被查找的范围是局部范围,因此它将被立即找到。正因为如此,并且由于没有外部访问局部变量,使用它们的函数中的代码可以得到很好的优化

最后,这可能是个人的编码偏好

我个人的规则是,如果我有一些多步骤引用,例如
e.target.value
,并且我在一个函数中多次使用它,然后,我将创建一个命名有意义的局部变量,并将其分配给该局部变量,这样我就可以在多个位置使用该局部变量,避免反复重复相同的多步骤属性引用(DRY的教科书示例)

这无疑也使代码更易于阅读,因为您有一个有意义的变量名,而且它只是一个简单的变量,而不是具有通用名称的多步骤属性引用。虽然从技术上讲,它可能是局部变量赋值的一行额外代码,但它节省了大量重复的属性查找,因此理论上,将结束值保存到
textBoxContent
中应该更快,而不必每次都使用解释器查找
e.target.value


此外,您永远不应该爱上那些在首次编写常规代码时希望对其进行微优化的人。像这样的优化通常只需要应用于所有代码的0.000001%,并且只有在您已经确切地证明了性能瓶颈所在之后。而且,即使这样,你也必须在你的目标环境中设计多个基准,以证明是什么让事情变得更快(而不仅仅是使用一个人的意见衡量)


在此之前,所有代码都应该是正确的、清晰的、可读的、可维护的、可扩展的、枯燥的、适当的性能,以及大约10个其他优先级,然后再考虑微优化。如果您将上述优先级应用到您询问的案例中,如果您在一个上下文中多次引用局部变量,您将始终决定将
e.target.value
分配给该局部变量。

“保存变量”听起来像是微观优化。除非您的域另有要求,否则您应该让执行引擎完成它的工作。这是一种微操作化的尝试,会妨碍代码的可读性。一般来说,这不是一个好的做法。要学究气,DRY有一个稍微复杂的含义,这通常意味着不要跨层复制数据表示。例如,不要用两种不同的模式语言在前端和后端复制一次数据模式。DRY通常意味着某种预处理器或DSL,在模式示例中,这将涉及以某种方式将单个模式编译成系统不同元素所需的版本。@torazaburo-我不知道DRY是否有确切的定义。我使用这个术语的意思是:“软件开发的一个原则,旨在减少各种信息的重复”,这是从参考的维基百科页面上直接获得的。因此,在我的书中可以避免在同一个函数中多次引用
e.target.value