JavaScriptの設計パターンの役割は、コードの再利用性と読みやすさを改善し、コードの維持と拡張を容易にすることです。
JavaScriptでは、関数はオブジェクトのクラスです。つまり、他の関数のパラメーターとして渡すことができます。さらに、関数は範囲を提供することもできます。
関数を作成するための構文
名前付き関数式
コードコピーは次のとおりです。
//名前関数式
var add = function add(a、b){
a+bを返します。
};
関数式
コードコピーは次のとおりです。
//匿名関数としても知られています
var add = function(a、b){
a+bを返します。
};
変数追加に割り当てられた値は、関数定義自体です。このようにして、Addはどこでも呼び出すことができる関数になります。
機能の宣言
コードコピーは次のとおりです。
function foo(){
//ここにコードします
} //ここではセミコロンは必要ありません
後続のセミコロンでは、関数式は常にセミコロンを使用する必要があり、関数の宣言ではセミコロンの終了は必要ありません。
関数宣言と表現
機能プロモーション(巻き上げ)
関数宣言の動作は、指定された関数式と同等ではありません。違いは巻き上げの動作です。次の例を参照してください。
コードコピーは次のとおりです。
<script type = "text/javascript">
//グローバル関数
function foo(){alert( "global foo!");}
function bar(){alert( 'globalbar');}
functionhoist(){
console.log(typeof foo); // function
console.log(typeof bar); // undefined
foo(); // localfoo!
bar(); // typeRror: '未定義'は関数ではありません
//変数fooと実装者が宣伝されます
function foo(){
アラート( 'local foo!');
}
//変数バーのみが宣伝され、関数実装部分は宣伝されていません
var bar = function(){
アラート( 'localBar!');
};
}
hoist();
</script>
すべての変数について、それらが身体内で宣言されている場合はどこでも、それらは関数の上部に内部的に宣伝されます。関数の一般的な適用の理由は、関数が変数に割り当てられたオブジェクトのみであるためです。
名前が示すように、改善とは、次のことを上に言及することを意味します。 JSでは、以下の定義に定義されているもの(変数または関数)をアップグレードすることです。上記の例からわかるように、関数内の機能ホイストのFOOとBARは上部に移動し、グローバルなFOOとバーの機能をカバーします。ローカル機能バーとFooの違いは、Fooが上部に昇格し、正常に実行できることですが、Bar()の定義は改善されていませんが、その宣言のみが促進されます。したがって、bar()が実行されると、結果は関数として使用される代わりに未定義です。
リアルタイム機能モード
関数はオブジェクトでもあるため、戻り値として使用できます。自己実行機能を使用する利点は、匿名関数を直接宣言し、すぐに使用することです。一度使用されていない関数の定義を避け、競合の命名の問題から解放されます。 JSには名前空間の概念はないため、機能名が競合するのは簡単です。命名紛争が行われると、最後に宣言されたものが勝ちます。
モード1:
コードコピーは次のとおりです。
<スクリプト>
(関数 () {
var a = 1;
return function(){
アラート(2);
};
}()()()); // pop 2、最初の括弧は自分自身を実行し、2番目の括弧は内部匿名関数を実行します
</script>
パターン2:自己実行関数変数の指さし
コードコピーは次のとおりです。
<script type = "text/javascript">
var result =(function(){
戻る2;
})(); //関数はここで実行されています
Alert(result); //結果は、自己実行機能の返品値2を指します。結果()がポップアップすると、エラーが発生します。
</script>
パターン3:ネストされた関数
コードコピーは次のとおりです。
<script type = "text/javascript">
var result =(function(){
return function(){
戻る2;
};
})();
alert(result()); // 2がアラート時にポップアップします(result); function(){return 2}
</script>
モード4:自己解釈関数は、その返品値を変数に割り当てます
コードコピーは次のとおりです。
var abc =(function(){
var a = 1;
return function(){
return ++ a;
}
})(); //自己執行関数は、変数に戻すと関数を返します
alert(abc()); // alert(abc)である場合、返されたステートメントがポップアップした後のコード。 ABC()の場合、返品後の関数が実行されます
パターン5:関数は、再帰的に内部的に実行されます
コードコピーは次のとおりです。
//これは自己実行機能であり、関数は内部的に、再帰的に実行されます
function abc(){abc(); }
コールバックモード
callback function:function write()を別のfunction call()への引数として渡すと、Call()は、ある時点でwrite(またはcall)を実行(または呼び出す)ことができます。この場合、write()はコールバック関数と呼ばれます。
非同期イベントリスナー
コールバックモードには多くの用途があります。たとえば、イベントリスナーがページ上の要素に接続されている場合、実際にイベントが発生したときに呼び出されるコールバック関数へのポインターを提供します。のように:
コードコピーは次のとおりです。
document.addeventlistener( "click"、console.log、false);
上記のコードの例は、ドキュメントがクリックしたときにバブルモードのコールバック関数console.log()を示しています。
JavaScriptは、コールバックモードが非同期に実行するプログラムをサポートするため、イベント駆動型プログラミングに特に適しています。
タイムアウト
コールバックモードを使用するもう1つの例は、ブラウザのウィンドウオブジェクトによって提供されるタイムアウトメソッドを使用する場合です。
コードコピーは次のとおりです。
<script type = "text/javascript">
var call = function(){
console.log( "100msが質問されます...");
};
setimeout(call、100);
</script>
ライブラリのコールバックモード
JSライブラリを設計するとき、コールバック関数は役立ちます。ライブラリのコードは、再利用可能なコードを可能な限り使用する必要があり、コールバックはこの一般化を達成するのに役立ちます。巨大なJSライブラリを設計するとき、ユーザーはそのほとんどを必要としないということです。コア機能に焦点を当て、「フックフォーム」でコールバック関数を提供することができます。
カレー
Curryingは、複数のパラメーターを関数本文に埋めることにより、関数を新しい単純化された(より少ないパラメーター)関数に変換する手法です。 - - JavaScriptに熟練しています】
簡単に言えば、カレー化は変換プロセス、つまり関数変換のプロセスです。次の例に示すように:
コードコピーは次のとおりです。
<script type = "text/javascript">
//カレーベースのadd()関数
関数add(x、y){
var oldx = x、oldy = y;
if(typeof oldy == "未定義"){
return function(newy){
Oldx + Newyを返します。
};
}
//完全なアプリケーション
x+yを返します。
}
//テスト
typeof add(5); //出力 "function"
追加(3)(4); // 7
//新しい関数を作成して保存します
var add2000 = add(2000);
Add2000(10); //出力2010
</script>
Add()が初めて呼び出されると、返された内部関数の閉鎖が作成されます。この閉鎖は、元のXとYの値をOldxおよびOldyにプライベート変数に保存します。
これで、次のような任意の関数Curry Common Methodを使用できます。
コードコピーは次のとおりです。
<script type = "text/javascript">
//通常の関数
関数add(x、y){
x + yを返します。
}
//新しい関数を取得する関数をカレーします
var newAdd = test(add、5);
NewAdd(4); // 9
//別のオプション、新しい関数を直接呼び出します
テスト(追加、6)(7); //出力13
</script>
いつカレーを使用するか
同じ関数が呼び出され、渡されたパラメーターのほとんどが同じであることがわかった場合、関数はカレー化の良い候補である可能性があります