JSHint和jQuery:'$'没有定义

以下JS:

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

产量:

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

当使用JSHint 0.5.5时。 有任何想法吗?

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

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

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

.jshintrc文件在JSHint的真正旧版本中不受支持(例如2012年原始问题中的v.5.5.5)。 如果您不能或不想使用.jshintrc文件,可以在脚本文件的顶部添加它:

 /*globals $:false */ 

JSHint选项页面上还有一个简写“jquery”jshint选项。

您也可以将两行添加到.jshintrc中

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

这告诉jshint有两个全局variables。

所有你需要做的是在你的.jshintrc设置"jquery": true

根据JSHint选项参考 :

jQuery的

这个选项定义了jQuery JavaScript库提供的全局variables。

这里是一个快乐的小清单,把你的.jshintrc
我会在时间stream逝的时候添加到这个列表中。

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

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

在文件/设置/ JavaScript /代码质量工具/ JSHint的环境部分,点击jQuerycheckbox。

我build议使用模块模式来解决这个问题,而不是推荐通常的“closuresJSHint全局variables”。 它保持你的代码被“包含”并提供性能提升(基于Paul Irish的“我学到的关于Jquery的10件事情” )。

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

 (function (window) { // Handle dependencies var angular = window.angular, $ = window.$, document = window.document; // Your application's code }(window)) 

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

  • 缩小代码时,传入的window对象声明也会被缩小。 例如window.alert()变成m.alert()
  • 自执行匿名函数内的代码只使用window对象的1个实例。
  • 当调用window属性或方法时,您会切换到chase,从而防止范围链的昂贵遍历,例如window.alert() (更快)与alert() (更慢)的性能。
  • 局部范围的function通过“命名空间”和遏制(全局是邪恶的)。 如果您需要将此代码拆分为单独的脚本,则可以为每个脚本创build一个子模块,并将它们导入到一个主模块中。

在使用在线JSHint实现时修复这个错误:

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

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

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

你可以input任何东西,例如console:false ,并且将它添加到列表(.jshintrc)中 – 作为全局的。