Firefox中没有定义JavaScript函数?

Ahr*_*got 13 javascript debugging error-handling firefox

我目前正在Firefox中调试我的网站的下一层,并在我的JavaScript中发现了一个非常奇怪的错误.在Firefox中,是否需要在引用这些函数的任何代码行之上定义函数?这对我来说真的很奇怪.

这是导致错误的简化版本:

var myClass = new MyClass(myCallback);

function myCallback() {
    // code
}
Run Code Online (Sandbox Code Playgroud)

它抛出了以下错误: Error: myCallback is not defined

这就是我需要做的才能在Firefox中工作:

var myCallback = function() {
    // code
}

var myClass = new MyClass(myCallback);
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:这是正常行为还是其他事情发生了?我的意思是,在将来编码时我是否需要考虑这一点?

Bil*_*oon 13

在使用以下格式启动时,必须在调用之前定义函数:

myCallback = function() {
    // code
}
Run Code Online (Sandbox Code Playgroud)

但是当您使用以下格式启动时,应该可以定义任何位置:

function myCallback() {
    // code
}
Run Code Online (Sandbox Code Playgroud)

  • 看起来似乎是一个任意规则,但我期望的推理是,第二种格式定义的函数定义一次,并在执行时预编译,但分配给它们的函数的变量可能会改变,所以必须在之后引用在被叫之前被分配,并且可能被多次交换/改变 (2认同)
  • 在FireFox中有一个[奇怪的行为](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Scope_Cheatsheet?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FScope_Cheatsheet#function_oddities)还没见过其他地方: (2认同)