【问题标题】:Javascript: Is reassigning a function parameter to a temporary variable sufficient?Javascript:将函数参数重新分配给临时变量是否足够?
【发布时间】:2018-02-20 20:13:13
【问题描述】:

对于流,有experimental.const_params=truetreats function parameters as const bindings 的选项。我可以通过将它分配给一个临时变量来轻松消除错误,但这是否真的解决了重新分配/改变函数参数的不良形式?

例如:

function someFunc(p1) {
  let temp = p1;
  temp.x = 10
  return temp
}

相对于:

function someFunc(p1) {
  p1.x = 10
  return p1
}

对于流,这足以防止流抛出错误。

它是否真正解决了该规则试图解决的问题?如果不是应该改用什么?

【问题讨论】:

  • 我会说这个选项是为了确保参数不被修改,所以通过重新分配它你只是在绕过规则。
  • 该规则旨在减少副作用,在这种情况下,函数修改其输入。不管你怎么做,你目前只是在回避它的观点。如果您不想遵循这种做法,我建议您完全关闭该规则。
  • 那么正确的形式是什么?据此,这是正确的,但我同意这似乎是在回避eslint.org/docs/rules/no-param-reassign
  • 您链接到的 eslint 文档页面末尾有一个链接,解释了为什么存在这样的规则。

标签: javascript flowtype


【解决方案1】:

这与传递的内容有关。在您的示例中, p1 是一个对象,因此参数是一个对象引用。对象的成员不受“const”类型的保护。如果您想防止对象被变异,您可能需要查看 Object.freeze()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2017-07-12
    • 2019-10-21
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多