4

我要疯了吗 - js 可以在范围内转发引用吗?

如果我是对的,这是 Firefox 22.0 中严重的范围错误吗?

if (true) { 

    test();

    function test() { 
        alert("success"); 
    } 
}

上面的代码因 test() 未定义而失败。如果代码在 if 语句之外执行(或者如果只是函数定义被移到 if 语句之外??!?)那么一切都很好。在 do .. while 等其他范围内发生相同的错误(未定义)。

上面的代码在 IE 和 Chrome 等中运行良好!

*更新*

不确定期望能够做到这一点是愚蠢的还是不合理的(在 sudo 代码中当然在语义上是有意义的) - 但是 js 之神决定只有语句可以出现在这样的块中(如引用来自 basilikum 的 spidermonkey / ECMA stuff 的链接中所述) - 所以不是 - 特别是在浏览器处理不一致的情况下(如果不是在严格模式下)。谢谢大家。

4

1 回答 1

5

Firefox 对 ECMAScript 有非本地扩展。

在 ECMAScript 中,在块语句中包含函数声明是无效的(尽管大多数浏览器在非严格模式下允许它),但在 Firefox 中,它们有一种称为函数语句的语法,它确实允许这样做。不同之处在于函数语句不像函数声明那样在单独的传递中进行评估,因此它类似于函数表达式,因为在定义之前您不能使用它。

于 2013-08-06T11:43:14.840 回答