我疯了 - js可以在范围内转发参考吗?
如果我是对的,这是Firefox 22.0中的严重范围错误吗?
if (true) {
test();
function test() {
alert("success");
}
}
上面的代码失败,test()未定义。如果代码在if语句之外执行(或者只是函数定义被移到if语句之外??!),那么一切都可以。在其他范围内发生(未定义)相同的错误,例如do .. while等。
以上代码在IE和Chrome等中运行良好!
* update *
不确定期望能够做到这一点是愚蠢或不合理的(在sudo代码中肯定是有意义的) - 但是js众神决定只有语句可以出现在这样的块中(如引用spidermonkey / ECMA东西的链接中所提到的)来自basilikum) - 所以不是 - 特别是浏览器处理不一致(如果不是严格模式)。谢谢大家。
答案 0 :(得分:5)
Firefox具有ECMAScript的非原生扩展。
在ECMAScript中,在块语句中有一个函数声明是无效的(虽然大多数浏览器允许它以非严格模式),但在Firefox中,它们有一个叫做函数语句的语法,这确实允许这个。不同之处在于函数语句不是像函数声明那样在单独的传递上求值,所以它类似于函数表达式,因为在定义它之前你不能使用它。