我有一个带有许多函数表达式的大型javascript文件。突然,控制台给了我以下错误:

在IE中

The value of the property 'myFunc' is null or undefined, not a Function object


在Firefox中

TypeError: myFunc is not a function


这就是我所谓的函​​数:

myFunc();


这是功能:

myFunc = function() {
  //do stuff
}


这发生在所有函数表达式上。如果我将一个更改为函数声明,则它可以工作,但是在其中的其他函数表达式调用上将失败。有没有搞错?

最佳答案

可能性1

如果在定义之前调用函数表达式,则会收到此错误。但是,如果将其转换为函数声明,则该函数声明将被提升到作用域的顶部,并且可以在实际声明发生之前或之后调用。所以:

functionFoo();
var functionFoo = function() {

};


会出现此错误,因为您试图在定义函数之前调用该函数。但:

functionFoo();
function functionFoo() {

}


将起作用,因为实际的函数声明被提升到作用域的顶部,并且可以在任何地方使用。

可能性2

如果从定义函数表达式的范围之外的其他范围调用函数表达式,则会出现此错误。与其他变量一样,函数表达式只能在定义的范围内使用。所以:

$( document ).ready( function() {
   var functionFoo = function() {

   };
} );
functionFoo();


将给您一个错误,因为函数的定义发生在与调用不同的范围内。但:

$( document ).ready( function() {
   var functionFoo = function() {

   };
   functionFoo();
} );


可以正常工作,因为定义和调用都发生在同一范围内。

09-25 18:29
查看更多