我遇到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期望每个语句后均要跟随;,除了
      forfunctionifswitchtrywhile。 JSLint并不期望
      查看不必要的分号或空语句。


为了提供名称空间保护,我根据此处的教程实现了名称空间:

http://elegantcode.com/2011/01/26/basic-javascript-part-8-namespaces/

但是,在将新变量分配给命名对象时,JSLint(显然是标准约定)认为代码

Obj.Method = function (TheArgs) { /*do stuff*/ };


无论使用function关键字如何,都应在其后加上分号。这是由于赋值运算符对分号的要求取代了功能关键字对分号的省略。

感谢Felix Kling指出“意外”表示紧接意外行之前的代码未正确结束。

10-05 21:07
查看更多