以下JS:

(function() {
  "use strict";

  $("#target").click(function(){
    console.log("clicked");
  });

}());

收益率:

test.js: line 5, col 3, '$' is not defined.

当使用JSHint 0.5.5检测时。什么好主意吗?


当前回答

下面是一个可以放在.jshintrc中的小列表 随着时间的推移,我将在这个列表中添加新的内容。

{
  // other settings...
  // ENVIRONMENTS
  // "browser": true, // Is in most configs by default
  "node": true,
  // others (e.g. yui, mootools, rhino, worker, etc.)
  "globals": {
    "$":false,
    "jquery":false,
    "angular":false
    // other explicit global names to exclude
  },
}

其他回答

要修复使用在线JSHint实现时的此错误:

点击“CONFIGURE”(页面中栏顶部) 启用“jQuery”(在底部的“假设”部分下)

还可以在.jshintrc中添加两行

  "globals": {
    "$": false,
    "jQuery": false
  }

这告诉jshint有两个全局变量。

下面是一个可以放在.jshintrc中的小列表 随着时间的推移,我将在这个列表中添加新的内容。

{
  // other settings...
  // ENVIRONMENTS
  // "browser": true, // Is in most configs by default
  "node": true,
  // others (e.g. yui, mootools, rhino, worker, etc.)
  "globals": {
    "$":false,
    "jquery":false,
    "angular":false
    // other explicit global names to exclude
  },
}

如果你正在使用一个相对较新的JSHint版本,通常首选的方法是在你的项目的根目录下创建一个.jshintrc文件,并将以下配置放在其中:

{
    "globals": {
        "$": false
    }
}

这向JSHint声明$是一个全局变量,false表示它不应该被覆盖。

.jshintrc文件在真正旧的JSHint版本中不受支持(例如v0.5.5,就像2012年的原始问题一样)。如果你不能或不想使用.jshintrc文件,你可以在脚本文件的顶部添加这个:

/*globals $:false */

还有一个简写“jquery”jshint选项,在jshint选项页面上可以看到。

我不建议使用通常的“关闭JSHint全局变量”,而是建议使用模块模式来解决这个问题。它使你的代码“包含”并提供性能提升(基于Paul Irish的“关于Jquery的10件事”)。

我倾向于这样写我的模块模式:

(function (window) {
    // Handle dependencies
    var angular = window.angular,
        $ = window.$,
        document = window.document;

    // Your application's code
}(window))

你可以获得其他性能好处(在这里解释更多):

When minifying code, the passed in window object declaration gets minified as well. e.g. window.alert() become m.alert(). Code inside the self-executing anonymous function only uses 1 instance of the window object. You cut to the chase when calling in a window property or method, preventing expensive traversal of the scope chain e.g. window.alert() (faster) versus alert() (slower) performance. Local scope of functions through "namespacing" and containment (globals are evil). If you need to break up this code into separate scripts, you can make a submodule for each of those scripts, and have them imported into one main module.