モダンJavaScript Day 14&15&16
5598 ワード
🔖 読み取り範囲:12章関数
ブックマーク
関数Function
関数は文(statement)によって一連のプロセスを実現し、コードブロックで囲まれ、実行ユニットとして定義される.
関数の構成:
JavaScript関数の特徴:
関数定義機能定義
関数を定義する方法は4つあります.
//함수 선언문
function add(x,y) {
return x+y;
}
//함수 표현식
var add = function (x,y) {
return x+y;
};
//Function 생성자 함수
var add = new Function ('x','y','return x+y');
//화살표 함수
var add = (x,y) => x+y;
ちなみに、関数は「定義」(definition)として表されます.変数は「宣言」を表し、逆も同様である.関数は、関数宣言が評価された後、識別子がデフォルトで生成され、関数オブジェクトが割り当てられるため、宣言後に割り当てられます.
関数宣言vs.関数式
1)関数宣言は、関数名を省略することはできません.
逆に、関数式は、関数を値として変数に割り当てます.したがって、関数名を省略することができます.なぜなら、関数式では、関数名ではなく変数名を使用して識別子を選択するからです.
このように変数名の代わりになるので、関数名は省略します.このように変数名のみであり,関数名が省略された関数を「匿名関数」と呼び,省略されていないものを「記名関数」と呼ぶ.
//함수 표현식 (익명)
var add = function (x,y) {
return x+y;
};
//함수 표현식 (기명)
var add = function add (x,y) {
return x+y;
};
2)関数宣言文は式ではなく文です.つまり、値切れない.
関数式は式文であるため、値として使用できます.
3)また、関数宣言として定義された関数は、関数宣言の前に呼び出すことができる.すなわち,関数反発が発生する.(*すべての宣言は、実行時までに実行されます.)
しかし、関数式で関数を定義すると、関数反発ではなく変数反発が発生します.すなわち、変数宣言は実行時より前に行われますが、変数値の割り当ては実行時に評価されるため、関数式の前に呼び出された値は未定義と評価され、関数を呼び出すとタイプエラーが発生します.
ファンクションジェネレータ関数
矢印関数
関数呼び出しFunction Call/Invoke
関数呼び出しは、識別子と関数呼び出し演算子を呼び出すためにカッコ()のペアを使用します.
// 함수 선언
function add (x,y) {
return x+y;
}
//함수 호출
var result = add(1,2);
関数を実行するために必要な値を外部から関数内部に渡す必要がある場合は、パラメータをパラメータで渡します.引数は、値から計算できる式でなければなりません.パラメータは、関数を呼び出すときに指定され、数とタイプは制限されません.
関数は、パラメータと引数の個数が一致するかどうかをチェックしません.パラメータが欠落しているためパラメータが割り当てられていないパラメータの値は定義されていません.パラメータがより多い場合、スキップされたパラメータは無視されます.このように無視されたパラメータは破棄されるのではなく,Arguオブジェクトとしてのpropertyが暗黙的に保存され,後で可変パラメータ関数を実現する際に使用される.(第18章)
また、JavaScriptはダイナミックタイプ言語です.脱文字JavaScript関数では、パラメータのタイプを事前に指定することはできません.したがって、javascriptでは、関数を定義する際に適切なパラメータが渡されていることを確認する必要があります.p.171のようなコードを直接作成したり、javascriptの親拡張バージョンのタイプスクリプトを導入したりして、コンパイル時に適切に呼び出されないようにします.
推奨パラメータは最大3つまでです.
関数はreturnキーと式(戻り値)を使用して、関数の実行結果を外部に返すことができます.
文を返す2つのロール:1.関数の実行を中断し、関数体を終了します.2.キーワードの後の式を返します.指定されていない場合はundefinedを返します.
function foo () {
return;
}
console.log(foo()); // undefined
参照による外部ステータスの転送と変更
各種関数の形式
大体4種類に分けることができます:即時実行関数、再帰関数、重畳関数、コールバック関数
インスタント実行関数:関数を定義しながらすぐに呼び出される関数.
(function () {}() ); 혹은
(function (){})(); 혹은
!function (){}(); 혹은
+function(){}(); 로 표현한다.
```
再帰関数:独自の関数を呼び出します.通常は複文の代わりに使われる.再呼び出しを止める脱出ドアを作らなければならない.そうでない場合、再帰関数が無限に呼び出され、スタックオーバーフローエラーが発生します.
var factorial = function foo (n) {
//탈출 조건 n 이 1 일 때 재귀호출을 멈춘다.
if (n <= 1) return 1;
// otherwise, 재귀 호출
return n * factorial(n-1);
};
ネストされた関数(または内部関数):関数内の関数.逆に、これらのオーバーラップ関数を含む関数を「外部関数」と呼びます.オーバーラップ関数は主に外部関数のhelper関数を助ける役割を果たす.
コールバック関数🌟: 関数のパラメータを介して他の関数の内部に渡されます.逆に、パラメータを介して関数の外部からコールバック関数を渡す関数を「高次関数」と呼びます.高次関数は、コールバック関数の呼び出し時間を決定することによって呼び出され、コールバック関数を関数に渡す場合、コールバック関数を呼び出す必要はなく、関数自体を渡す必要があります.
// 외부함수 repeat. 외부에서 전달받은 함수f(콜백함수)를 n만큼 반복호출한다.
function repeat (n,f) {
for (var i=0; i < n; i++) {
f(i);
}
};
// 소환될 함수(콜백함수)1
var logAll = function (i) {
console.log(i);
};
// 소환될 함수(콜백함수)2
var logOdd = function (i) {
if (i % 2) console.log(i);
};
// 반복 호출할 함수를 인수로 전달한다.
repeat ( 5, logAll); // !주의: logAll() 아님. logAll 임.
repeat ( 5, logOdd); // 여기도 마찬가지. 콜백함수는 호출 x, 함수 자체 전달.
疑問点
††感じたこと
💖 サマリ
Reference
この問題について(モダンJavaScript Day 14&15&16), 我々は、より多くの情報をここで見つけました https://velog.io/@jlee0505/모던-자바스크립트-Day-14-15-31ie2w17テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol