[英]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');
}
}
最初,我认为Chrome在测试之前也会抛出错误,但是以某种方式可以正常工作。 有人可以解释为什么它在Firefox中不起作用吗?
看来这已经是一个问题了很长时间-这是2011年的参考资料: http : //statichtml.com/2011/spidermonkey-function-hoisting.html
显然,Firefox会很高兴地在一个块的外部声明函数声明,但不会在一个块的内部这样做。 链接文章的作者认为这(虽然出乎意料)符合ECMA-262规范 ,该规范仅允许将语句放在块内...因为函数声明不是语句。 但是,我会注意到Firefox很高兴在块内允许函数声明-它只是拒绝提升它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.