防止 JSHint 警告“功能名称已定义但从未使用”

Posted

技术标签:

【中文标题】防止 JSHint 警告“功能名称已定义但从未使用”【英文标题】:Prevent JSHint warning that 'functionName is defined but never used' 【发布时间】:2012-09-18 09:46:22 【问题描述】:

我刚刚开始使用 JSHint(通过用于 Sublime Text 2 的 Sublime-Linter 包)。我想禁止它对在定义之前使用的函数的警告,因为我认为使用这样的函数定义没有问题。例如,以下代码会生成警告:

(function($) 

    $(document).ready(function()
    
      formValidationSetup();
      refreshErrorMessages();
    );

    function formValidationSetup()
    

    

    function refreshErrorMessages()
    

    

)(jQuery);

警告:

    formValidationSetup 已定义但从未使用过 refreshErrorMessages 已定义但从未使用过

我尝试在 JSHint 选项中将 undef 设置为 false,但我仍然收到这些错误。我应该设置另一个选项吗?为 undef 形成JSLint docs:

如果变量和函数在使用前不需要声明,则为真。这 在严格模式下不可用。

【问题讨论】:

您应该以此为提示在事件之前定义函数。这在技术上并不重要,但这样更容易理解代码。 当然,这只是一个偏好问题。我发现这样更容易理解,因为代码更少。 如果只是将函数定义移到顶部怎么会有更多代码? 对不起。误会你了。你说得对。相同数量的代码。对我来说,首先使用初始化程序更合乎逻辑。 【参考方案1】:

为了避免警告

定义但从未使用过

在您的 javascript 中的 jslint 中添加 cmets,例如:

 /*exported formValidationSetup, refreshErrorMessages */

在 jshint 和 jslint 中,你可以将未使用的选项设置为 false:

 /*jshint unused:false*/

见Options

【讨论】:

所有其他未使用的变量呢? unused:false 据我了解,它会忽略 all 未使用的行为。我认为这不是我们想要实现的目标。 // jshint ignore:line 将忽略这一行。 未使用在 jslint 中无效【参考方案2】:

我在 Chai 测试中遇到了 shouldexpect 的问题。我最终得到了这种模式:

'use strict';

var request = require('supertest');
var should = require('chai').should();  // jshint ignore:line
var expect = require('chai').expect;    // jshint ignore:line

process.env.NODE_ENV = 'test';
var appPromise = require('./index');

describe('GET /r_u_up', function() 

  it('respond with 204', function(done) 
    appPromise.then(function(app) 
      request(app)
      .get('/r_u_up')
      .expect(204, done);
    );
  );

);

【讨论】:

优秀的答案。谢谢。【参考方案3】:

你可以简单地使用

"unused": false,

在你的 .jshintrc 中

【讨论】:

【参考方案4】:

有趣的是,在 IIFE 中添加 'use strict'; 可以抑制错误。不知道为什么。

【讨论】:

【参考方案5】:

在典型的 Yoeman 设置中不接触 Gruntfile.js 的更好方法是编辑 .jshintrc 文件(Unix 系统中的隐藏文件)。并更新内容如下:


  "curly": true,
  "eqeqeq": true,
  "immed": true,
  "latedef": true,
  "newcap": true,
  "noarg": true,
  "sub": true,
  "undef": true,
  "unused": false, // the change is here
  "boss": true,
  "eqnull": true,
  "node": true

"unused" 设置为false

【讨论】:

欢迎来到 Stack Overflow。考虑使用缩进代码块或预格式化文本格式化答案中的代码元素:***.com/editing-help#code【参考方案6】:

你会想要使用 'latedef' 选项

【讨论】:

以上是关于防止 JSHint 警告“功能名称已定义但从未使用”的主要内容,如果未能解决你的问题,请参考以下文章

JSHint:关闭缺少分号警告

我的 vim 中的 JSHint 将 'yield' 标记为警告。

有没有办法抑制给定行的 JSHint 警告?

在 JSHint 中禁用有关“require”功能的警告

抑制 JSHint / JSLint 或替代服务中的“混合空格和制表符”警告?

如何禁用警告“定义”未使用 JSHint 和 RequireJS 定义