Firefox:函数提升错误
Firefox: function hoisting error
我曾经假设函数总是被提升到任何 JavaScript 代码块的顶部。
例如,这个有效:
document.addEventListener('something', dummy);
function dummy(){
console.log('dummy');
}
但这在 Firefox 中不起作用并抛出 ReferenceError
,但在 Chrome 中有效:
if(document){
document.addEventListener('something', dummy1);
function dummy1(){
console.log('dummy');
}
}
Fiddle code
最初,我假设 Chrome 在我测试之前也会抛出错误,但不知何故它工作正常。有人可以解释为什么它在 Firefox 中不起作用吗?
这似乎已经成为一个问题很长一段时间了 - 这是 2011 年的参考资料:http://statichtml.com/2011/spidermonkey-function-hoisting.html
显然,Firefox 会愉快地提升块外的函数声明,但不会在块内这样做。链接文章的作者认为这(虽然出乎意料)符合 ECMA-262 spec,它只允许块内的语句......因为函数声明不是语句。但是,我会注意到 Firefox 很高兴地允许块内的函数声明 - 它只是拒绝提升它们。
我曾经假设函数总是被提升到任何 JavaScript 代码块的顶部。
例如,这个有效:
document.addEventListener('something', dummy);
function dummy(){
console.log('dummy');
}
但这在 Firefox 中不起作用并抛出 ReferenceError
,但在 Chrome 中有效:
if(document){
document.addEventListener('something', dummy1);
function dummy1(){
console.log('dummy');
}
}
Fiddle code
最初,我假设 Chrome 在我测试之前也会抛出错误,但不知何故它工作正常。有人可以解释为什么它在 Firefox 中不起作用吗?
这似乎已经成为一个问题很长一段时间了 - 这是 2011 年的参考资料:http://statichtml.com/2011/spidermonkey-function-hoisting.html
显然,Firefox 会愉快地提升块外的函数声明,但不会在块内这样做。链接文章的作者认为这(虽然出乎意料)符合 ECMA-262 spec,它只允许块内的语句......因为函数声明不是语句。但是,我会注意到 Firefox 很高兴地允许块内的函数声明 - 它只是拒绝提升它们。