关于javascript:Firefox:函数提升错误

Firefox: function hoisting error

我曾经认为函数总是被提升到任何JavaScript代码块的顶部。

例如,这有效:

1
2
3
4
document.addEventListener('something', dummy);
function dummy(){
    console.log('dummy');
}

但这不起作用并在Firefox中抛出ReferenceError,但在Chrome中有效:

1
2
3
4
5
6
if(document){        
    document.addEventListener('something', dummy1);
    function dummy1(){
        console.log('dummy');
    }
}

小提琴代码

最初,我认为Chrome在我测试之前也会抛出错误,但不知怎的,它可以正常工作。 有人可以解释为什么它在Firefox中不起作用?


这似乎是一个问题很长一段时间 - 这里是2011年的参考:http://statichtml.com/2011/spidermonkey-function-hoisting.html

显然,Firefox会很乐意在一个块的OUTSIDE中提升函数声明,但不会在块内提升。 链接文章的作者认为这是(虽然意外)符合ECMA-262规范,它只允许块内的语句......因为函数声明不是语句。 但是,我会注意到Firefox很乐意在块内部允许函数声明 - 它只是拒绝提升它们。