JavaScript|関数1を使い直す


⌝出典:もう一度最初から、JavaScriptの投稿は李雄模()です. '「モダンJavaScript Deep Dive」 きろく

関数とは?


関数はJavaScriptの中で最も重要な核心概念です!オブジェクトの作成、メソッド、this、プロトタイプ、モジュール化はすべての関数と密接な関係があるため、これらの関数を正確に理解し、スキップする必要があります.
プログラミング言語の関数も数学の関数と同じです.f(x,y)=x+yはJavaScript関数として表される.
function add (x,y){
return x+y;
}

add(2,5) // 7
プログラミング言語の関数は、一連のプロセスを文で実装し、コードブロックで囲み、実行ユニットとして定義します.

-なぜ関数を使うの?


関数は数回呼び出すことができます.これはコードの再利用に非常に役立ちます.関数を使用せずに同じコードを複数回繰り返し記述すると、コードを変更する必要がある場合は、コードの繰り返し回数を変更する必要があります.コードの重複を抑制し、再利用性を高めることで、コードの信頼性を高め、メンテナンスの利便性を高め、エラーを減らすことができます.
関数はオブジェクトですが、通常のオブジェクトとは異なります.通常のオブジェクトを呼び出すことはできませんが、関数を呼び出すことができます.そして、普通のオブジェクトにはない関数オブジェクトのみ!所有する唯一の特許権.

-関数宣言

function add(x,y){
return x+y;
}
関数宣言は関数名を省略できません!濡れてる!はい.(add)
関数宣言は、式ではなく文です.コンソールで宣言を実行すると、未定義の完了値が出力されます.
(*式は文(statement)で、値で計算できます)
JavaScriptエンジンは、関数宣言を解析して関数オブジェクトを作成します.関数名は、関数の本体でのみ有効であるため、関数名以外に作成された関数オブジェクトを指す識別子が必要です.
したがって、JavaScriptエンジンは、関数名と同じ名前の識別子を暗黙的に作成し、作成した関数を呼び出すために関数オブジェクトを割り当てます.

-関数式


JavaScriptの関数は、オブジェクトタイプの「値」です.
この値の性質を持つオブジェクトは1レベルオブジェクトと呼ばれ、JavaScriptの関数は1レベルオブジェクトと呼ばれます.
関数は1レベルのオブジェクトです.これは、関数が値のように自由に使用できることを意味します.
関数として定義されたadd関数を関数式に変換します.
var add = function(x,y){
return x+y;
}

console.log(add(2,5)) // 7
関数宣言で見たように、関数を呼び出すときに関数名ではなく関数オブジェクトを指します!!識別子を使用する必要があります.関数名は関数内部でのみ有効なので、関数名で関数を呼び出すことはできません.
var add= function foo (x,y){
return x+y;
}

//함수 객체를 가리키는 식별자로 호출
console.log(add(2,5)) // 7

//함수 이름은 함수 몸체 내부에서만 유효한 식별자이므로 에러!
console.log(foo(2,5)) // ReferenceError
関数宣言文と関数式の違いについて、それぞれまとめます.
関数は式ではなく文として宣言され、関数式は式文として宣言されます.微妙ですが、重要な違いがあります.

-関数の作成ポイントと関数のエスケープ

//함수 참조
console.dir(add) // f add (x,y)
console.dir(sub) // undefined

//함수 호출
console.log(add(2,5)) // 7
console.log(sub(2,5)) // TypeError

//함수 선언문
function add(x,y){
return x+y;
}

//함수 표현식
var sub = function(x,y){
return x-y;
};
たとえば、「関数宣言」と定義された関数は、関数宣言の前に呼び出すことができますが、関数式は呼び出されません(TMI...この部分はちょっと不思議です...)
関数の作成時間が異なるためです.
すべての宣言と同様に、関数宣言もコードが行単位で実行される前にJavaScriptエンジンによって最初に実行されます.関数宣言を使用して関数を定義すると、実行時までに関数オブジェクトが作成されます.次に、関数名と同じ名前の識別子を暗黙的に作成し、作成した関数オブジェクトを割り当てます.
したがって、関数宣言文の前に関数を参照することができ、JavaScript固有の特徴として関数カバー(関数昇格)と呼ばれます.
簡単に言えば、塩水湖漂流と変数漂流の微妙な違い.
  • 両方とも、実行時より前にJavaScriptエンジンによって最初に実行され、識別子が生成される点は同じです!
  • var宣言を未定義に初期化する前に、未定義の
  • を参照してください.
  • 塩水湖ステーションデフォルトで生成された識別子を関数オブジェクトとして初期化->呼び出し可能
  • 関数式は、変数に割り当てられた値が関数テキストであるため、変数宣言文と変数割り当て文を一度に記述する簡略化された表現と同じです.
    すなわち,関数式の関数テキストも割当て文の実行時に計算され,関数オブジェクトである.(もちろん、変数宣言のように、以前の呼び出しは定義されていません)
    関数式で関数を定義すると、関数のシースではなく変数のシースが発生します!!!

    •Functionコンストラクタ


    パラメータリストと関数本体を文字列としてJavaScriptに組み込まれたコンストラクション関数Functionコンストラクション関数に渡し、new演算子とともに呼び出すことで、関数オブジェクトが作成され、返されます.
    var add = new Function('x', 'y', 'return x+y');
    
    console.log(add(2,6)) // 8
    Functionジェネレータ関数で生成する方法は一般的ではありません!!
    モジュール、関数宣言、式を作成しない動作とは異なります.
    (モジュールは後で公開されます!!)

    •矢印関数


    関数をより簡単に宣言できます.
    const add = (x,y) => x+y;
    console.log(add(2,5)) // 7
    矢印関数は,既存の関数に比べて表現を簡略化するだけでなく,内部挙動も簡略化する.
    矢印関数は、既存の関数とは異なるバインド方法で構築関数として使用できません.
    プロトタイププロファイルは存在せず、パラメータオブジェクトは作成されません.あとは详しく教えて!