私はいくつかの異なるプロジェクトを作業しましたが、私はjquery/javascript関数を作成する2つの異なる方法を見てきました。関数を変数に代入するかどうかの違い
最初:
function testFunction(){
};
秒:
var testFunction = function(){
};
は、これらの間に違いはありますか?
私はいくつかの異なるプロジェクトを作業しましたが、私はjquery/javascript関数を作成する2つの異なる方法を見てきました。関数を変数に代入するかどうかの違い
最初:
function testFunction(){
};
秒:
var testFunction = function(){
};
は、これらの間に違いはありますか?
最初のもの(関数宣言)は、が宣言されているスコープの先頭にを吊り上げたものです。一方、2番目のもの(関数式)は宣言されていません。
testFunction();
function testFunction() {}
割り当てがその場で起こるので、あなたは、関数式でこれを行うことはできません。
これは、あなたがそれを呼び出した後に宣言された関数を呼び出すことができます理由です。
testFunction();
var testFunction = function() {}; //TypeError
第三の形態(関数式命名)もある。
var testFunction = function myFunc() {};
は この場合、識別子myFunc
は関数内にのみ存在し、testFunction
は宣言されたスコープ内で使用できます。 BUT(そしてInternet Explorerの場合は常にありますが)バージョン9より下のIEでは、myFunc
の識別子が誤って包含範囲に漏れています。名前付き関数式は、呼び出し関数を参照する必要がある場合に便利です(arguments.callee
は推奨されていません)。
はまた同じことが、変数宣言の真実であることに注意してください。
var x; //Declaration is hoisted to top of scope, value is `undefined`
console.log(x);
x = 10; //Assignment happens where you expect it to
+1 ***知識***私はこれがどのように働いたのか分かりませんでした。私は 'var testFunction = function(){}'の問題を抱えていて、その理由を知らなかった。これは完全に理にかなっています。 – iambriansreed
IE9はそのバグを修正しました。 –
@ imeVidas - 右。私はそれを追加します。 –
ます。http:// kangax
あなたはJavaScriptエンジンは、このようなコードを解釈することを想像することができます。 github.com/nfe/これを読んで –
Seconded ....... –