以下JS:

(function() {
  "use strict";

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

}());

收益率:

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

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


当前回答

我不建议使用通常的“关闭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.

其他回答

还可以在.jshintrc中添加两行

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

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

你可能想做以下事情,

const $ = window.$

避免它抛出linting错误。

我不建议使用通常的“关闭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.

如果您正在使用IntelliJ编辑器,在

首选项/设置 Javascript 代码质量工具 JSHint 预定义的(在底部),单击Set

你可以输入任何东西,例如console:false,它也会把它添加到列表(.jshintrc)中——作为一个全局变量。

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

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