Firefox:函数提升错误

mid*_*ido 6 javascript firefox

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

例如,这有效:

document.addEventListener('something', dummy);
function dummy(){
    console.log('dummy');
}
Run Code Online (Sandbox Code Playgroud)

但这不适ReferenceError用于Firefox,但在Chrome中有效:

if(document){        
    document.addEventListener('something', dummy1);
    function dummy1(){
        console.log('dummy');
    }
}
Run Code Online (Sandbox Code Playgroud)

小提琴代码

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

S M*_*han 4

看来这个问题已经存在相当长一段时间了 - 这是 2011 年的参考:http://statichtml.com/2011/spidermonkey-function-hoisting.html

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