所有函数表达式突然不被识别为函数

时间:2012-09-25 15:47:50

标签: javascript function function-declaration function-expression

我有一个包含许多函数表达式的大量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 个答案:

答案 0 :(得分:2)

可能性1

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

functionFoo();
var functionFoo = function() {

};

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

functionFoo();
function functionFoo() {

}

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

可能性2

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

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

   };
} );
functionFoo();

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

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

   };
   functionFoo();
} );

工作得很好,因为定义和调用都发生在同一范围内。