我遇到JSLint问题,它提供了一个无法理解的错误:
我正在尝试分析以下结构的代码:
<script type="text/javascript">
var MyGlobalObj = MyGlobalObj || {}; //used for creating namespace security
MyGlobalObj.MyFunction = function () {
//valid javascript
}
$(document).ready(function () {
//Stuff I want analyzed
});
</script>
我在代码中混合使用了javascript和jQuery。但是,JSLint声称,在执行ready操作的同时,它认为:
Unexpected '$'.
$(document).ready(function() {
对不起,但是...什么?为什么那是意外的?什么是“正确”的实现?
Options I am using:
/*jslint white: true, browser: true, devel: true */
Entry in the predef box:
$
注意:在其他地方,我根据需要声明$(variable)没有问题。只是那一行。
最佳答案
发生JSLint优先级的意外冲突以产生此错误。
根据有关分号的JSLint文档:
JSLint期望每个语句后均要跟随;
,除了
for
,function
,if
,switch
,try
和while
。 JSLint并不期望
查看不必要的分号或空语句。
为了提供名称空间保护,我根据此处的教程实现了名称空间:
http://elegantcode.com/2011/01/26/basic-javascript-part-8-namespaces/
但是,在将新变量分配给命名对象时,JSLint(显然是标准约定)认为代码
Obj.Method = function (TheArgs) { /*do stuff*/ };
无论使用function关键字如何,都应在其后加上分号。这是由于赋值运算符对分号的要求取代了功能关键字对分号的省略。
感谢Felix Kling指出“意外”表示紧接意外行之前的代码未正确结束。