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
- 预定义(在底部),单击设置
- JSHint
- 代码质量工具
- 使用Javascript
你可以input任何东西,例如console:false
,并且将它添加到列表(.jshintrc)中 – 作为全局的。