関数を宣言する方法
通常、関数を宣言するには2つの方法があります。
foo(){}; //関数宣言var foo = function(){}; //関数式違い
1。関数式は、その後ブラケットで直接実行できます
2。関数宣言は事前に事前に分類されます
分析前
まず、例を見てみましょう。
foo(); //関数宣言foo_later(); // foo_laterはfunctionfunctionではありませんfoo(){console.log( 'function declaration'); } var foo_later = function(){console.log( 'function Expression'); }ご覧のとおり、機能宣言FOOは事前に処理され、独自のコードの前に実行できます。関数式foo_laterはできません。この問題を解決するには、最初にJavaScriptパーサーの作業メカニズムを把握する必要があります。
可変ブースト(ホイスト)
JavaScriptパーサーは、変数と関数宣言を独自の範囲で開催します。つまり、上記の例は実際に理解され、パーサーによって次の形式に解析されます。
function foo(){console.log( '関数宣言'); } //すべての関数宣言は高度なvar foo_laterです。 //関数式(変数宣言)は変数のみを前進させ、割り当て操作は高度なfoo()ではありません。 foo_later(); foo_later = function(){console.log( 'function Expression'); }また、これは、関数式がエラーを返す前に関数を呼び出す理由を説明することもできます。これは、まだ割り当てられていないため、未定義の変数であり、もちろん実行できないためです。
同様に、次のコードの出力を推測することもできます。
console.log(delaredlater); var declaredlater = "今それは定義されています!"; console.log(delaredlater);
このコードは、次の形式に解析できます。
var宣言者; console.log(delaredlater); // undefineddeclaredlater = "今それは定義されている!"; console.log(delaredlater); //これで定義されています!
変数宣言が最初に言及されています(したがって、変数に存在するエラーは報告されません)が、割り当ては進歩していないため、最初の出力結果は未定義です。
それはそれに注意する必要があります
関数宣言は事前に処理されるため、この方法を使用して異なる関数を宣言しないでください。次の例の出力を推測してみてください。
if(true){function aaa(){alert( '1'); }} else {function aaa(){alert( '2'); }} aaa();期待したものとは異なり、コードは「2」でポップアップします。これは、2つの関数宣言がIFステートメントが実行される前に事前に承認されているため、IFステートメントはまったく役に立たないためです。 AAA()が呼び出されると、次の関数が直接実行されます。
要約します
上記の説明を通して、次のように要約できます。
•変数の宣言はスコープの最上部に進出し、割り当てはそのまま残っています
•「前」全体の関数宣言
•関数が値として変数に割り当てられている場合、変数のみが「Advanced」であり、関数は「Advanced」ではありません。
上記の例を練習することで、もっと体験してください。また、ベストプラクティスとして:変数宣言は、スコープ/関数の上部に配置する必要があります(JavaScriptには関数スコープのみがあります!)。
上記の記事は、関数宣言、関数式、および変動の改善が私が共有するすべてのコンテンツを包括的に理解しています。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。