JSHint和jQuery:'$'没有定义

时间:2012-01-13 15:18:10

标签: javascript jquery jshint

以下JS:

(function() {
  "use strict";

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

}());

收率:

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

使用JSHint 0.5.5时使用。有什么想法吗?

9 个答案:

答案 0 :(得分:375)

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

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

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

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

/*globals $:false */

JSHint options page上还有一个简写的“jquery”jshint选项..

答案 1 :(得分:147)

您还可以在.jshintrc

中添加两行
  "globals": {
    "$": false,
    "jQuery": false
  }

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

答案 2 :(得分:50)

您需要做的就是在"jquery": true中设置.jshintrc

根据JSHint options reference

  

jquery的

     

此选项定义jQuery JavaScript库公开的全局变量。

答案 3 :(得分:16)

这是一个快乐的小清单,放在你的.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
  },
}

答案 4 :(得分:7)

如果您使用的是IntelliJ编辑器,例如WebStorm,PyCharm,RubyMine或IntelliJ IDEA:

在File / Settings / JavaScript / Code Quality Tools / JSHint的Environments部分中,单击jQuery复选框。

答案 5 :(得分:3)

我建议使用module pattern来修复此问题,而不是推荐通常"关闭JSHint全局"它保持您的代码"包含"并提升表现(基于Paul Irish'} {/ 3}}。

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

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

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

您可以获得这些其他性能优势(更多解释为"10 things I learned about Jquery"):

  • 在缩小代码时,传入的window对象声明也会缩小。例如window.alert()成为m.alert()
  • 自执行匿名函数内的代码仅使用window对象的1个实例。
  • 在调用window属性或方法时切入追逐,防止对范围链进行昂贵的遍历,例如window.alert()(更快)与alert()(更慢)的表现。
  • 通过"命名空间"的本地功能范围和遏制(全局是邪恶的)。如果您需要将此代码分解为单独的脚本,则可以为每个脚本创建一个子模块,并将它们导入到一个主模块中。

答案 6 :(得分:2)

使用the online JSHint implementation时修复此错误:

  • 点击“配置”(页面中间栏顶部)
  • 启用“jQuery”(位于底部的“ASSUME”部分下)

答案 7 :(得分:1)

如果您使用的是IntelliJ编辑器,请在

  • 偏好/设置
    • 的Javascript
      • 代码质量工具
        • JS​​Hint
          • 预定义(在底部),单击设置

您可以键入任何内容,例如console:false,它也会将其添加到列表(.jshintrc)中 - 作为全局。

答案 8 :(得分:0)

您可能想要执行以下操作,

const $ = window.$

为了避免它引发掉毛错误。