【问题标题】:Best practice for unused function parameters未使用函数参数的最佳实践
【发布时间】:2014-12-10 09:58:44
【问题描述】:

我一直想知道处理以下问题的最佳方法是什么。

someCallback: function(param1,param2,paramThatIActuallyNeed) {
     doSomethingWith(paramThatIActuallyNeed)
}

所以在本例中,param1param2 未使用,但我需要将它们放在那里以便访问第三个参数。这让 JSLint 很难过,我想知道避免这种情况的做法是什么?当使用具有许多回调结果的库时,往往会发生这种情况。

【问题讨论】:

  • 最佳实践是忽略 JSLint,没有其​​他(好的)方法可以在不指定前者的情况下访问后者的参数。
  • 惊讶的 adeneo 的评论有三个上升。 JSLint 有一个专门针对所问问题的标志;见torazaburo's answer, below

标签: javascript parameters jslint


【解决方案1】:

您可以使用arguments 对象,在此处详述:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

例如:

someCallback: function() {
     doSomethingWith(arguments[2]);
}

【讨论】:

  • 啊是的没想过使用参数!谢谢:)
  • 不,您不能使用argumentsJSLint 会给你一个Use a named parameter. 错误。
【解决方案2】:

你总是可以使用一个对象来保存你的参数,那么只要你检查它们是否丢失也没关系。

function doThing(args) {
  var age = args.age || 12;
  console.log(age);
  if (args.name) { console.log(args.name); }
};

doThing({
  name: 'Bob',
  age: 12
  occupation: 'spaceman'
});

【讨论】:

  • 我不喜欢这个答案的唯一原因是,它假定您可以控制函数的调用方式。如果是这样,JSLint 的原始错误实际上是有效的——如果不使用前两个参数,则停止传递。 unparam 解决方法适用于当您发现自己陷入事件处理程序区域或类似的约束约定,并且您无法合理地阻止传递额外参数时。
【解决方案3】:

这就是unparam 的用途:

/*jslint unparam: true */

这是另一个选择 jshint 的好理由,它不会做这种愚蠢的事情。

我绝对建议不要使用 arguments 来安抚 jslint。

【讨论】:

  • 出于好奇,您为什么建议不要使用 arguments 对象?
  • @DarkLord7854 请参阅上面对您的答案的评论:因为 JSLint 仍然会抛出错误,Use a named parameter. 使用 unparam 标志是正确的答案。
  • @DarklLord7854 在我意识到即使使用arguments JSLint 仍然会仍然不高兴之前写过,但无论如何它只是看起来太麻烦了让它快乐。
【解决方案4】:

不会安抚 jslint(*),但您可以利用解构来完全省略未使用的参数。诚然,它的语法有些尴尬,但它是一种选择:

function func(...[, , paramThatIActuallyNeed]) {
  console.log(paramThatIActuallyNeed)
}

func(1, 2, 3); // Logs: 3

可能有更好的语法,但上述方法确实有效。

(*) jslint 在解构参数方面非常保守,会在上面的代码中抛出Expected an identifier and instead saw '['.

不完全确定您的问题是专注于在您的情况下安抚 jslint 还是实现实际上没有未使用的变量浮动的最终结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2015-10-09
    • 2011-09-24
    相关资源
    最近更新 更多