防止 JSHint 警告:“functionName已定义但从未使用”

47

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

(function($){ 

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

    function formValidationSetup()
    {

    }

    function refreshErrorMessages()
    {

    }

})(jQuery);

警告:

  1. formValidationSetup 被定义但从未使用。
  2. refreshErrorMessages 被定义但从未使用。

我已经尝试将 undef 设置为 false 在 JSHint 选项中,但仍然收到这些错误。是否还有其他选项需要设置?请参考JSLint 文档中对于 undef 的说明:

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


3
在事件发生前定义函数会更容易理解代码,虽然从技术上讲这并不重要,但你应该把这当作一个提示。 - Markus Unterwaditzer
1
当然,这只是个人偏好的问题。我发现这样更容易理解,因为代码量更少。 - Undistraction
如果你只是将函数定义移到顶部,为什么会有更多的代码呢? - Markus Unterwaditzer
1
抱歉,我误解了你。你是对的。代码量相同,只是对我来说更合乎逻辑的是先有初始化器。 - Undistraction
6个回答

91
为了避免在 JavaScript 中出现 JSLint 的警告信息:`defined but never used`,请添加注释。
 /*exported formValidationSetup, refreshErrorMessages */
在jshint和jslint中,您可以将unused选项设置为false:
 /*jshint unused:false*/

请参见选项


7
其他未使用的变量怎么办?根据我的理解,unused:false 会导致它忽略所有未使用的行为。我不认为这是想要实现的效果。 - Mohamed Bana
8
// jshint ignore:line 会忽略那一行的警告。 - Michael Cole
1
未使用在jslint中是无效的。 - DPM

9

我在使用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);
    });
  });

});

优秀的答案。谢谢。 - Ken Ingram

5
您可以简单地使用。
"unused": false,

在你的.jshintrc文件中


3
在典型的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


2
欢迎来到 Stack Overflow。考虑使用缩进的代码块或预格式化文本来格式化您的答案中的代码元素:http://stackoverflow.com/editing-help#code - sampathsris

3
有趣的是,在IIFE内部添加'use strict';可以抑制错误,但不确定原因。

-1

你需要使用“latedef”选项


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接