提问人:LFN 提问时间:8/6/2013 最后编辑:LFN 更新时间:8/6/2013 访问量:142
Firefox 22.0 范围错误?[复制]
Firefox 22.0 scope bug? [duplicate]
问:
我是不是疯了 - js 可以在范围内转发引用,对吧?
如果我是对的,这是 Firefox 22.0 中一个严重的范围错误吗?
if (true) {
test();
function test() {
alert("success");
}
}
上面的代码失败,test() 未定义。如果代码是在 if 语句之外执行的(或者如果只是函数定义移动到 if 语句??!?之外),那么一切正常。在其他作用域(如 do ..而等。
上面的代码在IE和Chrome等中工作正常!
* 更新 *
不确定期望能够做到这一点是愚蠢还是不合理(在 sudo 代码中当然在语义上有意义) - 但 js 神决定只有语句才能出现在这样的块中(如引用 spidermonkey / ECMA 的链接中提到的来自 basilikum 的东西) - 所以不 - 尤其是在不一致的浏览器处理中(如果不是在严格模式下)。谢谢大家。
答:
5赞
user2437417
#1
Firefox 有 ECMAScript 的非原生扩展。
在 ECMAScript 中,在 block 语句中包含函数声明是无效的(尽管大多数浏览器允许在非严格模式下这样做),但在 Firefox 中,它们有一种称为函数语句的语法,它确实允许这样做。不同之处在于,函数语句不像函数声明那样在单独的传递上计算,因此它类似于函数表达式,因为在定义它之前不能使用它。
评论
while
if
if
if
while