今回は、JSにおける関数の重要性と、JSで関数を使用する際の注意点について、実際の事例を交えて見ていきましょう。
それはオブジェクトなので、次のことができます:
リテラルを介して作成
変数、配列要素、プロパティ(プロパティ)に代入する
はパラメータとして関数に渡されます
の関数に加えて、動的に作成および割り当てることができるプロパティが含まれています
オブジェクト上では、他のオブジェクトとは異なる関数を呼び出すことができます。
JSには変数のホイストがあります。変数が var で宣言されると、その変数は直ちに現在のスコープの先頭に昇格されます (let と const で宣言された変数はそうではありません)。例:
1 function a() {2 console.log(b);3 var b = 10;4 }5 a(); //undefined
上記のコードの実行結果は未定義です。その理由は、変数 b が var を通じて宣言されると、変数の昇格が発生し、すぐに現在のスコープの先頭に昇格されるためです (昇格は宣言の直後、b がまだ定義されていないときに行われることに注意してください!) 、この時点での「現在のスコープ」は関数 a のスコープです。したがって、上記のコードは実際には次のようになります:
1 function a() {2 var b; //变量的声明被提升至当前作用域顶部3 console.log(b);4 b = 10;5 }6 a();
変数 b の宣言が 2 行目に昇格され (宣言のみが昇格されます)、この時点では b には値が代入されていないため、コードは継続します。コンソールの3行目に実行すると、log(b)とunknownが出力されます。
JSには変数プロモーションの他に「関数プロモーション」もあります。同様に機能も昇格しますが、機能は宣言された昇格だけではなく「全体の昇格」となります。以下のコードを見てください:
1 function a() {2 b();3 function b() {4 console.log("yes!");5 }6 }7 a(); //yes!
この時点で、関数 b は正常に実行できます。これはまさに、関数がプロモートされ、「全体的にプロモートされている」ため、 b() は正常に実行できます。このコードは実際には次と同等です:
1 function a() {2 function b() {3 console.log("yes!");4 }5 b();6 }7 a(); //yes!
通常の形式で宣言された関数のみがプロモートできることに注意してください。 例:
1 function a() {2 b();3 var b = function() { //字面量声明的函数4 console.log("yes!");5 }6 }7 a(); //报错
ここでの匿名関数はリテラルを通じて宣言されているため、関数の昇格はなく、エラーが報告されます。
しかし、変数と関数が同時に宣言された場合、どちらが優先されるのでしょうか?
JS において、関数が「第一級市民」と呼ばれる理由の 1 つは、関数が変数と比較して 優先度 を持っているためです。昇格が発生すると、その関数はスコープの最上位に昇格します。例:
1 function a() {2 var b = 10;3 function b () {4 console.log("yes!");5 }6 console.log(b);7 console.log(typeof b);8 }9 a(); //10 number
このコードでは、変数 b の宣言がホイストされていますが、「第一級市民」である関数は変数 b の宣言の上にホイストされています。コードの実行段階で b に 10 が割り当てられるため、出力結果は b が 10 で、型は number になります。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨書籍:
WeChat ミニ プログラムで双方向データ バインディングを実装する方法
JavaScript に最適化された DOM Webpack モジュールの使用方法
以上がJSにおける関数の重要性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。