【问题标题】:What is the best way to get rid of no-param-reassign error (eslint)?摆脱 no-param-reassign 错误(eslint)的最佳方法是什么?
【发布时间】:2016-01-08 03:04:34
【问题描述】:

我目前正在此代码上尝试 eslint,但遇到了错误(请参见屏幕截图)。我不确定消除错误的最佳方法是什么。

代码sn-p:

let pathFor = ( path, view ) => {
  if ( path.hash ) {
    view = path;
    path = view.hash.route;
    delete view.hash.route;
  }

尝试消除错误(可行但不确定是否是最好的方法):

let pathFor = ( pathData, viewData ) => {
  if ( pathData.hash ) {
    view = pathData;
    path = view.hash.route;
    delete view.hash.route;
  }

这里是 eslinting 在 sublime 中的截图

【问题讨论】:

  • 这个函数到底想完成什么?看起来您正在传递两个值,然后使用一个来覆盖另一个?
  • @Jonah Williams 哦,对不起,我已经编辑过了。这段代码 sn-p 是我从样板文件中复制/粘贴的内容。我只是在练习 eslinting,因为它对我来说是新的。我只想知道处理 no-param-reassign 的最佳方法。
  • "no-param-reassign": 0 添加到您的.eslintrc 文件中。否则你更新的代码会更好。
  • 在您的修订版本中,viewpath 没有在任何地方声明。如果它们不存在于更高的范围内,那将是一个错误。
  • @AndyRay 本文说明了不重新分配函数参数的重要性。 spin.atomicobject.com/2011/04/10/…

标签: javascript eslint


【解决方案1】:

有很多方法可以做到这一点。 linter 会出错,因为您正在改变一个参数,这可能会让阅读您的代码的人感到困惑,或者导致其他问题。一种更“功能性”的编程风格基本上是 linter 所推荐的(创建一个新变量而不是改变一个旧变量),而且可能是正确的。我过去使用的一种方法是“匈牙利案例”:

let pathFor = (_path, _view) => {
  if (_path.hash) {
    view = _path;
    path = view.hash.route;
    delete view.hash.route;
  }

但是,小下划线的含义可能是任意的,具体取决于谁在阅读您的代码。

但是,我认为你拥有它的方式很好。正如菲尔卡尔顿所说:

计算机科学中只有两个难点:缓存失效和命名。

我认为这个问题更多是关于“最佳命名实践”的问题。如果是这样,我也不会在这上面浪费太多精力。

【讨论】:

  • 注明。感谢您澄清这个问题:)
  • 在您的示例中,viewpath 从未声明过。那可能会让 esLint 再次行动起来。不应该是const view...const path
  • @RemEmber 正确,我省略了初始变量声明(理论上它们可以在函数中声明,但假设它们是在函数范围之外初始化并在函数体中“填充”稍后的)。很好的收获。
猜你喜欢
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多