Angular Firefox-only Error"参数不是函数,未定义"在$ broadcast功能

时间:2015-09-21 20:15:53

标签: javascript angularjs firefox

我在控制台中收到了Angular错误:Error: Argument 'myControllerName' is not a function, got undefined。在堆栈跟踪之后,它似乎来自$broadcast函数,从updateRoute调用,等等。棘手的是错误只发生在Firefox 中,而不是Chrome或IE。

设定:

  • Angular v1.1.5
  • Firefox 40.0.3 有错误
  • Chrome 45.0.2454.93 m,或IE 11.0.9600 正常工作

我已经通过类似的SO答案查看"参数不是函数,未定义"但是它们都没有从我能说的内容中解决这个特定问题。我还检查了Angular changelog,但没有特别提及下一版本的Firefox修复程序。

有没有人知道Firefox和其他浏览器之间的差异,或此Angular版本中的任何已知错误,或此错误的可能原因?

1 个答案:

答案 0 :(得分:0)

发现了潜在的问题:控制器使用的是ES5严格模式('use strict';),并且有问题的函数在范围内定义得太迟了。解决方案是简单地移动定义违规函数的位置。

所以似乎 在Firefox处理ES5严格模式的方式上存在一些差异。

来自Mozilla Developer Network's Script Mode reference

  

...特定于Mozilla的警告:... 严格模式禁止函数语句不在脚本或函数的顶层。在浏览器的普通代码中,允许使用函数语句&#34 ;到处&#34 ;.这不是ES5(甚至是ES3)的一部分!它是在不同浏览器中具有不兼容语义的扩展。未来的ECMAScript版本有望为函数语句指定新的语义,而不是在脚本或函数的顶层。

More details here.