1

多くの関数式を含む大量の 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つを関数宣言に変更すると機能しますが、その中の他の関数式呼び出しで失敗します。一体何?

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 に答える