閉鎖とカレーは、JavaScriptで使用される一般的で比較的高度な手法です。すべての機能プログラミング言語は、これら2つの概念をサポートしています。したがって、JavaScriptで機能的なプログラミング特性を完全に活用したい場合は、これら2つの概念を詳細に理解する必要があります。閉鎖は、実際にはカレーのための不可欠な基盤です。
1。カリーの概念
コンピューターサイエンスでは、カレーは、複数のパラメーターを受け入れる関数を単一のパラメーター(元の関数の最初のパラメーター)を受け入れる関数に変換し、残りのパラメーターを受け入れ、結果を返す新しい関数を返す技術です。この技術は、モーゼス・シュンフィンケルとゴットロブ・フリージによって発明されたものの、クリストファー・ストラチーによる論理学者のハスケル・カリーにちなんで命名されました。直感的に、カレーは「特定のパラメーターを修正すると、残りのパラメーターを受け入れる関数が得られる」と主張しています。したがって、2つの変数を持つ関数YXの場合、y = 2が固定されている場合、1つの変数を持つ関数2xが取得されます。
カレーとは、単純な関数を取得するために、機能の特定のパラメーターを事前に渡すことを意味します。しかし、事前にパスされたパラメーターは閉鎖に保存されるため、いくつかの独特の機能があります。例えば:
var adder = function(num){return function(y){return num + y; }} var inc = adder(1); var dec = adder(-1)2つの変数Inc/DECは、実際には2つの新しい関数です。これは、次の例の使用など、括弧内で呼び出すことができます。
// inc、decは現在、2つの新しい関数になります。これは、着信パラメーター値(+/-)1print(inc(99)); // 100print(dec(101)); // 100print(adder(100)(2)); // 102print(adder(2)(100)); // 102print(dec(101));
2。カレーの適用
カレー機能によると、より興味深いコードを書くことができます。たとえば、フロントエンドの開発では、この状況に遭遇することがよくあります。リクエストがサーバーから返される場合、特定のページ要素、つまり部分的な更新の概念を更新する必要があります。ローカルの更新を使用することは非常に簡単ですが、コードは簡単に書き込みできます。また、カレーを使用すると、コードを大幅に美しくし、維持しやすくすることができます。例を見てみましょう:
//更新は関数を返します。これにより、ID属性をアイテム関数アップデート(item)のWeb要素のコンテンツに設定できます(item){return function(text){$( "div#"+item).html(text); }} // ajax request、成功した場合、parameter parameter callbackfunction refresh(url、callback){var params = {type: "echo"、data: ""}; $ .ajax({type: "post"、url:url、cache:false、async:true、datatype: "json"、data:params、// call success:function(data、data){callback(data);}、//コールエラーがリクエストでエラーが発生したとき:function(err){alert(err: "+err) });} refresh( "Action.do?target=news"、update( "Newspanel")))更新関数はカレーのインスタンスであり、関数を返します。つまり、更新( "Newspanel")= function(text){$( "div#newspanel")。html(text);}更新の返品値(「Newspanel」)は関数であり、必要なパラメーターは文字列であるため、Ajax Call of Refreshの場合、成功すると、コールバックによって返されるデータがコールバックに渡され、それによってNewspanelパネルの更新が実現されます。他の記事パネルの記事と画像パネルの写真パネルのリフレッシュはすべて、このように採用されています。このようにして、コードの読みやすさと保守性が向上します。
上記は、この記事のコンテンツ全体です。 JavaScriptの詳細については、「JavaScriptリファレンスチュートリアル」と「JavaScriptコードスタイルガイド」をご覧ください。また、誰もがwulin.comをもっとサポートすることを願っています。