JavaScript では、関数はオブジェクトの一種です。つまり、関数はパラメータとして他の関数に渡すことができるほか、スコープも提供できます。
js関数の基本部分:javascript学習メモ(4)関数関数部分
関数を作成するための構文
名前付き関数式
関数式
関数の宣言
関数式では常に末尾のセミコロンを使用する必要があり、関数宣言では末尾のセミコロンは必要ありません。
関数の宣言と式
関数の巻き上げ
関数宣言の動作は、名前付き関数式の動作と同等ではありません。次の例を参照してください。
関数 hoist(){
console.log(typeof foo);//関数
console.log(typeof bar);//未定義
foo();//ローカル foo!
bar();//TypeError: '未定義' は関数ではありません
//変数 foo と実装者が昇格されます
function foo(){
alert('local foo!');
}
//変数 bar のみがプロモートされ、関数実装部分はプロモートされません
var bar = function(){
alert('地元のバー!');
};
}
ホイスト();
アセンションとは、その名が示すとおり、下にあるものを上に引き上げることです。 JSでは最後に定義したもの(変数や関数)を前に定義するように昇格させることです。 上の例からわかるように、関数ホイスト内の foo と bar が先頭に移動され、グローバルな foo 関数と bar 関数がカバーされます。ローカル関数 bar と foo の違いは、foo は最上位に昇格され、通常どおり実行できますが、bar() の定義は昇格されず、その宣言のみが昇格されるため、bar() が実行されると結果が表示されることです。関数として使用されるのではなく、未定義として使用されます。
インスタント機能モード
関数はオブジェクトでもあるため、戻り値として機能します。自己実行関数を使用する利点は、匿名関数を直接宣言してすぐに使用できるため、一度使用した後は使用しない関数を定義する必要がなくなり、名前の競合の問題が回避されることです。そのため、関数名の競合が発生しやすくなります。名前の競合が発生した場合は、最後に宣言されたものが優先されます。モード 1:
モード 2: 自己実行関数変数を指す
alert(result);//result は自己実行関数の戻り値 2 を指します。result() がポップアップすると、エラーが発生します。
モード 3: 入れ子関数
alert(result());//alert(result) がポップアップしたとき 2;alert(result()) がポップアップしたとき function(){return 2}
モード 4: 自己実行関数は戻り値を変数
に代入します。モード 5: 関数は内部的に再帰的に実行されます
コールバックモード
コールバック関数: 関数 write() をパラメータとして別の関数 call() に渡すと、call() は特定の瞬間に write() を実行 (または呼び出し) することがあります。この場合、write() はコールバック関数と呼ばれます。
非同期イベントリスナー
コールバック パターンには多くの用途があります。たとえば、ページ上の要素にイベント リスナーをアタッチする場合、実際にはイベントの発生時に呼び出されるコールバック関数へのポインターが提供されます。例:
上記のコード例は、ドキュメントのクリック イベントがバブリング モードのコールバック関数 console.log() に渡されることを示しています
JavaScript は、コールバック モードがプログラムの非同期実行をサポートしているため、イベント駆動型プログラミングに特に適しています。
タイムアウト
コールバック モードを使用する別の例は、ブラウザのウィンドウ オブジェクトによって提供されるタイムアウト メソッド、setTimeout() および setInterval() を使用する場合です。
ライブラリのコールバック モード
js ライブラリを設計する場合、ライブラリのコードは可能な限り再利用可能なコードを使用する必要があり、コールバックはこの一般化を実現するのに役立ちます。実際、巨大な JS ライブラリを設計する場合、ユーザーはほとんどの関数を必要とせず、コア関数に集中して「フック形式」でコールバック関数を提供できるため、拡張機能の構築が容易になります。およびカスタム ライブラリ メソッド
カレー
Curry テクノロジは、関数本体に複数のパラメータを埋め込むことによって、関数を新しい簡略化された (受け入れられるパラメータが少なくなった) 関数に変換するテクノロジです。 ————【JavaScriptに堪能な方】
簡単に言えば、カリー化は変換プロセス、つまり関数変換を実行するプロセスです。以下の例:
これで、次のような関数カレーの一般的なメソッドを使用できるようになります。
//別のオプションは、新しい関数を直接呼び出すことです
Test(add,6)(7);//出力 13
カリー化を使用する場合
同じ関数が呼び出されており、渡されたパラメーターが圧倒的に同じであることが判明した場合、その関数はカリー化のパラメーターとして適している可能性があります