以下JS:
(function() {
"use strict";
$("#target").click(function(){
console.log("clicked");
});
}());
产量:
test.js: line 5, col 3, '$' is not defined.
使用 JSHint 0.5.5 进行 linted 时。有任何想法吗?
以下JS:
(function() {
"use strict";
$("#target").click(function(){
console.log("clicked");
});
}());
产量:
test.js: line 5, col 3, '$' is not defined.
使用 JSHint 0.5.5 进行 linted 时。有任何想法吗?
如果您使用的是相对较新的 JSHint 版本,通常首选的方法是在项目的根目录中创建一个 .jshintrc 文件,并将此配置放入其中:
{
"globals": {
"$": false
}
}
这向 JSHint 声明 $ 是一个全局变量,而 false 表示它不应该被覆盖。
.jshintrc 文件在真正旧版本的 JSHint 中不受支持(例如 v0.5.5,就像 2012 年的原始问题一样)。如果您不能或不想使用 .jshintrc 文件,可以在脚本文件的顶部添加:
/*globals $:false */
JSHint 选项页面上还有一个速记“jquery” jshint 选项。
您还可以在 .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
},
}
如果您使用的是 IntelliJ 编辑器,例如 WebStorm、PyCharm、RubyMine 或 IntelliJ IDEA:
在 File/Settings/JavaScript/Code Quality Tools/JSHint 的 Environments 部分中,单击 jQuery 复选框。
我不推荐通常的“关闭 JSHint 全局变量”,而是建议使用模块模式来解决这个问题。它使您的代码保持“包含”并提高性能(基于 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
,防止代价高昂的作用域链遍历,例如window.alert()
(更快)与alert()
(更慢)性能。如果您使用的是 IntelliJ 编辑器,请在
您可以输入任何内容,例如console:false
,它会将其添加到列表 (.jshintrc) 以及 - 作为全局。
要在使用在线 JSHint 实现时修复此错误:
您可能想要执行以下操作,
const $ = window.$
以避免它抛出 linting 错误。