Firefox 22.0范围错误?

时间:2013-08-06 11:34:38

标签: javascript firefox closures

我疯了 - js可以在范围内转发参考吗?

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

if (true) { 

    test();

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

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

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

* update *

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

1 个答案:

答案 0 :(得分:5)

Firefox具有ECMAScript的非原生扩展。

在ECMAScript中,在块语句中有一个函数声明是无效的(虽然大多数浏览器允许它以非严格模式),但在Firefox中,它们有一个叫做函数语句的语法,这确实允许这个。不同之处在于函数语句不是像函数声明那样在单独的传递上求值,所以它类似于函数表达式,因为在定义它之前你不能使用它。