1

我遇到了 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 声称,根据准备好的操作,即:

Unexpected '$'.
        $(document).ready(function() {

对不起,但是……什么?为什么会出乎意料?什么是“正确”的实现?

Options I am using:
    /*jslint white: true, browser: true, devel: true */
Entry in the predef box:
    $

注意:在其他地方,我根据需要声明 $(variable) 没有问题。就这么一行。

4

2 回答 2

0

这是该代码的 JSLint 验证版本。

  1. 添加分号
  2. 使用严格

    /*全局$,文档*/

    “使用严格”;

    var MyGlobalObj = MyGlobalObj || {}; //用于创建命名空间安全

    MyGlobalObj.MyFunction = function () { // 有效的 javascript };

    $(document).ready(function () { // 我要分析的东西 });

于 2012-08-09T18:42:12.873 回答
0

发生 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*/ };

后面应该跟一个分号,不管函数关键字的使用。这源于赋值运算符对分号的要求,以取代函数关键字省略分号。

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

于 2012-07-31T17:09:36.867 回答