我有一个带有许多函数表达式的大型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();
} );
可以正常工作,因为定义和调用都发生在同一范围内。