Firefox: function hoisting error
我曾经认为函数总是被提升到任何JavaScript代码块的顶部。
例如,这有效:
1 2 3 4 | document.addEventListener('something', dummy); function dummy(){ console.log('dummy'); } |
但这不起作用并在Firefox中抛出
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很乐意在块内部允许函数声明 - 它只是拒绝提升它们。