我有一个包含许多函数表达式的大量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
}
这发生在所有函数表达式上。如果我将一个更改为函数声明它可以工作,但然后在其中的一些其他函数表达式调用失败。到底是什么?
答案 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();
} );
工作得很好,因为定义和调用都发生在同一范围内。