JavaScript JSHint - ' close'已定义但从未使用过

时间:2014-12-04 05:09:54

标签: javascript jslint jshint

我不知道为什么,但是我用作函数名的一些单词会被定义但从未使用的lint错误。

例如,下面的代码返回错误:

// I am using AngularJS
$scope.close = close;

function close() {
    /* Code here */
}

但这不是:

// I am using AngularJS
$scope.close2 = close2;

function close2() {
    /* Code here */
}

错误在function close()行。为什么这么特别的名字?如何将此错误静音?

1 个答案:

答案 0 :(得分:1)

(注:答案已经过大量编辑)

摘要

John Papa says to use latedef in JSHint并且至少是隐含地忽略JSLint问题。 (latedef已定义here。)

我相信那里有一个很好的解决方案(见下文),但是,它包含了Papa建议的样式的优点,代码在JSHint JSLint中。 / p>

JSHint"错误"不要抱怨close2。 JSLint完全像你期待的那样抓住它。


closeclose2不是JSHint问题

对于它的价值,如果您将代码(jslint格式化的Pasteee以及close& close2 here)粘贴到JSLint.com两者 {{ 1}}和close会导致错误。如果您没有看到close2的错误,我就会猜到它的JSHint问题,但确切地看到您的问题会更有用#&# 39;通过JSHint(在上下文中)重新定义以确定。

因此close2不是JSLint的特殊名称。我想看看你的"实际"上下文中的代码,看看JSLint是否会说类似的东西

为了清楚起见,这突破JSLint.com

close

生成/*jslint sloppy:true, white:true */ /*global $scope */ $scope.close2 = close2; function close2() { return "something"; }

如果你想知道为什么JSHint,我相信,打破,我们可以去JSHint代码探索,但回答你的JS L int标签(至少)你的行为看到没有发生。


如何修复

请参阅this SO answer,了解您在此处讨论的内容,John Papa says to use latedef in JSHint。解决掉毛问题的另一种方法是忽略爸爸和define the function first,但正如你在comment, below中提到的那样,这并不理想。

所以,这是我能想到的最好的妥协......

  1. 声明,但不要定义将保存函数的变量。
  2. 插入您的Angular指令
  3. 从1。
  4. 定义您的功能

    这肯定会使JSHint错误无效,因为导致它的代码不再存在。如果我正在做Angular并且需要遵循Papa风格,那就是我要做的就是保持Crockford的祝福。

    示例:

    'close2' was used before it was defined. $scope.close2 = close2;