【问题标题】:find error in javascript在javascript中查找错误
【发布时间】:2011-01-24 15:55:11
【问题描述】:

我有几个 javacsript 文件,我正在使用 js 打包器来打包它们,然后将它们全部合并并包含在一个页面中。

问题是打包后我收到了这个错误:

错误:丢失;声明之前

我认为这是因为在 js 文件中的某处使用了新行而不是 ; 字符,并且由于打包器删除了新行,因此您会收到错误

那么,我怎样才能找到 ; 在脚本中省略的位置?

【问题讨论】:

  • 通过 JSLint 传递解压后的代码。它会告诉你把分号放在哪里。但是,它也可能指示许多其他错误:)
  • 您可能想要切换压缩器。 YUI Compressor 不错,但 Google Closure Compiler 可能更好。这是一篇关于这个主题的过时文章:bloggingdeveloper.com/post/….
  • 谢谢。找到它:D(顺便说一句,它是循环 jquery 插件)

标签: javascript jquery


【解决方案1】:

有一个名为 jslint 的工具,它可以通过多种选项静态分析 JavaScript 源代码。它应该告诉你失败在哪里。还有一个在线版本可用。一探究竟: http://www.jslint.com/

【讨论】:

    【解决方案2】:

    根据您使用的工具,这可能会发生。想象两个 .js 文件:

    a.js

    (function() {
        var bar = 10;
    }())
    

    b.js

    var foo = 5;
    alert(foo);
    

    两者都可以单独工作,但如果将它们打包在一起,它将不再工作:

    (function() { var bar = 10; }())var foo = 5;alert(foo);
    

    显然,因为缺少;。避免这种情况的一个好模式是每个 javascript 文件都以 ; 开头,例如:

    固定 a.js

    ;(function() {
        var bar = 10;
    }())
    

    固定 b.js

    ;var foo = 5;
    alert(foo);
    

    输出

    ;(function() {var bar = 10;}());var foo = 5;alert(foo);
    

    一切都清楚了,谢谢!

    【讨论】:

    • 每个js文件都用分号结束不是更有意义吗?
    • @Šime Vidas:我不确定这是否更有意义。我喜欢把它放在前面,所以很明显它会丢失而无需滚动到最后。
    • 我想这也是有道理的 :) 虽然我不知道,因为我一开始就不会接受无分号的代码。
    【解决方案3】:

    当您使用这些文件没有打包时,它们会给您一个错误吗?一些打包程序要求您在使用文字定义函数时放置分号,并且在使用对象文字时也需要放置分号(否则它们会生成不正确的代码——请参阅this):

    var func = function() {
    ...
    }; //<--- semicolon required!
    
    var obj = {
    ...
    }; //<--- semicolon required!
    

    您使用的是什么打包程序(如果您缺少分号,JSMin 和打包程序不喜欢它)?您也可以尝试通过JSLint 运行您的文件以查看错误所在。我建议先通过 JSLint 运行解压版本(这样你就可以知道你的解压版本是否有错误)。

    【讨论】:

    • @Alex Packer 不喜欢在对象和函数字面量中错过分号。尝试通过 JSLint 运行您的原始文件;您应该能够找到丢失的分号。
    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 2021-12-25
    • 2017-01-11
    • 1970-01-01
    • 2011-05-15
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多