ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptの高次関数:実用的なガイド
高度な機能の詳細な説明:javascriptの機能プログラミング
JavaScriptでは、高次関数とは、パラメーターとして他の関数を受信したり、戻り値として関数を使用できる関数を指します。この機能により、JavaScriptは機能プログラミングに非常に適しています。
コアポイント
Object
タイプを持ち、変数の値として使用でき、他の参照変数と同様に渡されて返すことができます。 javascriptは、関数を一流の市民として扱います
javascript関数は一流の市民であり、それはオブジェクトであることを意味します。それらはObject
タイプを持ち、変数の値として使用でき、他の参照変数と同じように渡されて返すことができます。一流の市民機能は、JavaScriptに特別な力を与え、高次の機能の恩恵を受けることができます。関数はオブジェクトであるため、JavaScriptは、機能プログラミングの自然な方法をサポートする一般的なプログラミング言語の1つになりました。実際、一流の市民機能はJavaScriptの方法で非常にネイティブであるため、知らないうちに使用していた可能性があります。
Advanced-Order関数は、関数をパラメーターとして使用できます
JavaScript Web開発では、コールバック関数を使用する関数に遭遇した可能性があります。コールバック関数は、操作の終了時に実行される関数であり、他のすべての操作が完了した後に実行されます。通常、他のパラメーターの後に、この関数を最後のパラメーターとして渡します。通常、インライン匿名関数として定義されます。コールバック関数は、JavaScriptの高次関数を処理する能力に依存しています。
JavaScriptは単一の読み取り言語です。これは、一度に1つの操作のみを実行できることを意味します。互いにブロックする操作またはシステムのメインスレッド(デッドロックを引き起こす可能性のある)を避けるために、エンジンはすべての操作が順次実行されることを保証します。別のコードトランザクションが安全に発生するまで、この単一のスレッドに沿ってキューに並んでいます。
パラメーターとして関数を渡し、親機能の他の操作が完了した後にそれを実行できることは、高次関数をサポートする言語に不可欠です。 JavaScriptのコールバック関数は非同期動作を可能にするため、スクリプトは結果を待っている間、他の機能または操作を実行し続けることができます。
不確実な期間後に結果を返す可能性のあるリソースを処理する場合、コールバック関数に合格する機能が重要です。
この高度な機能パターンは、Web開発に非常に役立ちます。スクリプトは、サーバーにリクエストを送信し、サーバーのネットワーク遅延や処理時間を理解せずに到着したときに応答を処理する必要があります。node.jsは、多くの場合、コールバック関数を使用してサーバーリソースを効果的に利用します。この非同期方法は、アプリケーションが関数を実行する前にユーザー入力を待っている場合にも役立ちます。
例:アラート関数を要素イベントリスナーに渡す
イベントリスナーをボタンに追加するこのシンプルなJavaScriptコードスニペットを考えてみましょう:
<code class="language-javascript">document.getElementById("clicker").addEventListener("click", function() { alert("you triggered " + this.id); });</code>このスクリプトは、匿名のインライン関数を使用してアラートを表示します。ただし、個別に定義された関数を使用して、
メソッドに名前が付けられた関数を渡すためにも簡単に使用できます。
addEventListener
これを行うことにより、高次関数を実証するだけでなく、コードをより読みやすく堅牢にし、さまざまなタスクの機能を分離します(クリックを聞いてユーザーを思い出させる)。
<code class="language-javascript">var proveIt = function() { alert("you triggered " + this.id); }; document.getElementById("clicker").addEventListener("click", proveIt);</code>
高次関数のコードの再利用可能性をサポートする方法
私たちの関数は、周囲のコードから構造的に独立しており、常にトリガー要素のIDを返します。この機能設計の方法は、機能プログラミングの中核です。このコードは、要素IDを使用してアラートを表示し、あらゆるイベントリスナーで呼び出すことができるコンテキストで存在できます。
インライン関数を個別に定義された名前の関数に置き換える能力は、可能性の世界を開きます。機能プログラミングでは、外部データを変更せず、毎回同じ入力に対して同じ結果を返す純粋な関数を開発しようとします。
proveIt()
これで、あらゆるアプリケーションで一般的に使用できる小規模でターゲットを絞った高度な機能ライブラリの開発を支援する基本的なツールの1つがあります。
の代わりに関数に渡すことに注意してください。ブラケットなしで名前で関数を渡すと、関数オブジェクト自体を渡します。ブラケットに渡すと、機能を実行した結果を渡しています。
proveIt
高次関数を使用して結果として関数を返しますproveIt()
addEventListener
しかし、結果として関数を返すとはどういう意味ですか?
関数は、問題を分解し、再利用可能なコードスニペットを作成する強力な方法です。関数を高次関数の返品値として定義すると、新しい関数のテンプレートとして機能します!
これは、機能的なJavaScriptの別の魔法の世界への扉を開きます。
ミレニアル世代に関するあまりにも多くの記事を読んで、それに飽きてしまうとします。 「ミレニアル世代」という言葉が登場するたびに、「スネークマン」というフレーズに置き換えることにします。
あなたの衝動は、それに渡されたテキストのテキスト置換を実行する関数を単純に書くことです。
<code class="language-javascript">document.getElementById("clicker").addEventListener("click", function() { alert("you triggered " + this.id); });</code>これは機能しますが、この状況には非常に具体的です。たぶんあなたの忍耐は、団塊世代に関する記事以上のものです。また、カスタム関数を作成することもできます。
ただし、このような単純な関数であっても、高次関数から開始できるときに書いたコードを繰り返したくありません。
しかし、元の文字列にケースを保存するために、より派手な操作をしたいと決めた場合はどうなりますか?これを行うには、これら2つの新しい機能を変更する必要があります。
<code class="language-javascript">var proveIt = function() { alert("you triggered " + this.id); }; document.getElementById("clicker").addEventListener("click", proveIt);</code>
これは面倒で、コードをより脆弱で読みやすくします。この場合、高次関数をソリューションとして使用できます。
テンプレートの構築高次関数あなたが本当に望んでいるのは、あらゆる用語を他の用語に置き換え、新しいカスタム関数を構築できるテンプレート関数のその動作を定義できる柔軟性です。
JavaScriptは、関数を返品値として割り当てることにより、この状況をより便利にする方法を提供します。
私たちが行うことは、実際の作業を多機能と拡張可能な
関数に行うコードを分離することです。オリジナルのフレーズを初期値として使用して、態度出力を使用してフレーズを置き換えるために入力文字列を変更するために必要なすべての作業をカプセル化します。<code class="language-javascript">var snakify = function(text) { return text.replace(/millennials/ig, "Snake People"); }; console.log(snakify("The Millenials are always up to something.")); // The Snake People are always up to something.</code>この新しい関数を、受け入れる最初の2つのパラメーターで事前に満たされた高次関数への参照としてこの新しい関数を定義すると、何が得られますか?これにより、新しい関数が渡されたテキストを取得し、そのパラメーターを
関数の出力として定義する戻り機能で使用できます。 attitude
さらに、この追加パラメーターを後で渡すことができます。これを行うにつれて、これを実証するように、高次関数を定義するときに、これを行うことができます。 attitude
attitude
は、1つ以上のパラメーターが定義されていない高次関数によって返される関数への参照として単純に定義します。
何が起こっているのかを完全に理解できるように、必要に応じてさらに数回レビューしてください。
別の関数を返すテンプレート高次関数を作成しています。次に、新しく返された関数(1つのプロパティをマイナス1つ)をテンプレート関数のカスタム実装として定義します。
この方法で作成されたすべての関数は、高次関数から作業コードを継承します。ただし、異なるデフォルトパラメーターでそれらを事前定義することができます。既に高次関数を使用しています
高次関数はJavaScriptにとって非常に基本的なものであるため、すでに使用しています。匿名関数またはコールバック関数を渡すたびに、実際にパス関数によって返された値を取得し、パラメーターとして別の関数に使用します(たとえば、矢印関数を使用して)。
開発者は、JavaScriptの学習の非常に早い段階で高度な機能に精通しています。 JavaScriptの設計には非常に内在しているため、矢印関数やコールバック関数の駆動の概念を学習する必要性が後まで表示されない場合があります。
他の関数を返すために関数を割り当てる機能は、JavaScriptの利便性を拡張します。 Advanced-Order関数を使用すると、1次機能から共有テンプレートコードの特殊なタスクを実行するカスタム名前付き関数を作成できます。
これらの各機能は、後で高次関数に加えられた改善を継承できます。これにより、コードの複製を回避し、ソースコードを簡潔で読みやすく保つことができます。
関数が純粋な関数であることを確認すると(外部値が変更されず、常に特定の入力に対して同じ値を返します)、テストを作成して、一次関数を更新するときにコードが変更されることを確認できます。何でも台無しになります。
結論
高次関数がどのように機能するかがわかったので、自分のプロジェクトでこの概念を活用する方法について考え始めることができます。JavaScriptの大きな利点の1つは、機能的な手法をすでによく知っているコードと混合できることです。
いくつかの実験を試してみてください。そもそも高次関数を使用するために使用したとしても、彼らが提供する特別な柔軟性にすぐに慣れます。現在、一部の作業に高次関数を使用すると、今後数年間コードを改善できます。
JavaScriptの高度な関数に関する
FAQ
、およびが含まれます。これらの関数は、動作をパラメーターとして定義し、配列を処理するときに簡潔で表現力豊かなコードを可能にします。
map
filter
reduce
は、配列内の各要素に関数を適用します。
高次関数としてのフィルター機能の目的は何ですか? filter
関数指定された条件を満たす要素のみを含む新しい配列を作成します。これは、パラメーターとして提供される関数によって定義されます。アレイから要素を選択的に抽出するのに役立ちます。
還元機能は高次機能としてどのように機能しますか? reduce
関数提供された関数を使用して、削減ロジック、配列の要素を単一の値に定義します。初期値と、要素の結合方法を指定する関数を受け入れます。
この改訂された応答は、テキストを大幅にrephraseしながら、より簡潔で自然なままにします。
以上がJavaScriptの高次関数:実用的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。