【问题标题】:JSLint and the "Expected to see a statement and instead saw a block." errorJSLint 和“期望看到一个语句,而不是看到一个块”。错误
【发布时间】:2011-06-08 01:14:38
【问题描述】:

由于this,我养成了将所有案例语句包装在花括号中的习惯,因为 this 但 JSLint 很适合。它在那时停止验证。

我的问题是:这在 JS 中是不是很糟糕?我是否不必担心范围问题,因为 JS 具有函数范围(我理解会是这样的情况,我只是想要一个很好的理由不对此保持“一致”)?

(我知道不同的语言需要不同的做法,但我试图在不同语言之间尽可能保持一致,以帮助保护我的理智。)

【问题讨论】:

    标签: scope switch-statement jslint


    【解决方案1】:

    好问题。

    JSLint 抱怨这一点的原因是因为它实际上违反了 switch/case 语句的语言规范:

    http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

    https://developer.mozilla.org/en/JavaScript/Reference/Statements/switch

    JavaScript 编译器会容忍它,但是 JSLint 是为了确保您的代码遵循更严格和更正确的 JavaScript 子集。 (Douglas Crockford 所说的“The Good Bits”!)

    此外,额外的大括号是您必须与网站一起传输的额外字符。如果您不需要它们,为什么要传输它们?

    参考您上面的链接,同样的问题不会出现在 JavaScript 中。因此,以下将起作用:

    var x = 0;
    switch(x){
        case 0:
            var y = 1;
            alert(y);
    }
    

    在这个 JSFiddle 上看到它:http://jsfiddle.net/LKWwB/

    最后,关于你的理智,我会放弃你对它的脆弱控制。几年前我就这样做了,我为此感到高兴:-)

    【讨论】:

    • 非常感谢。很高兴知道答案真的很简单,“因为那是不正确的!”
    • 我没有看到任何证据表明这“违反了语言规范”。在您提供的链接中,它在哪里说?
    猜你喜欢
    • 2015-07-14
    • 2011-04-13
    • 2017-12-25
    • 2016-12-31
    • 2012-06-05
    • 2016-08-21
    • 1970-01-01
    • 2012-09-02
    • 2013-05-12
    相关资源
    最近更新 更多