【问题标题】:Firefox: function hoisting errorFirefox:函数提升错误
【发布时间】:2015-07-01 00:18:58
【问题描述】:

我曾经假设函数总是被提升到任何 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 中不起作用?

【问题讨论】:

标签: javascript firefox


【解决方案1】:

这似乎是一个问题已经有一段时间了 - 这是 2011 年的参考:http://statichtml.com/2011/spidermonkey-function-hoisting.html

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

【讨论】:

  • 不管怎样,原来的 jsfiddle.net/Lfosmckp/1 在 Firefox 45 中表现出不良行为,但在 Firefox 47 中不是。我今天刚刚从一位客户那里遇到了这个问题报告,在旧版本上确认,修复我们的代码,然后发现“更新您的浏览器”也是一个解决方案。还是知道的好。
  • 谢谢!很好的收获。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多