1

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

在 IE 中

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

在火狐中

TypeError: myFunc is not a function

这就是我调用函数的方式:

myFunc();

这是功能:

myFunc = function() {
  //do stuff
}

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

4

1 回答 1

2

可能性 1

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

functionFoo();
var functionFoo = function() {

};

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

functionFoo();
function functionFoo() {

}

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

可能性 2

如果您从定义函数表达式的范围之外的不同范围调用函数表达式,您将收到此错误。函数表达式和其他变量一样,只能在它们定义的范围内使用。所以:

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

   };
} );
functionFoo();

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

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

   };
   functionFoo();
} );

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

于 2012-09-25T16:48:26.333 回答