[JS]関数第1章

4365 ワード

🦆 学習グループのLover Duckと一緒に!
<コンテンツ>
1.関数とは?
2.関数の使用理由
3.関数リットル
4.関数の定義
5.関数宣言
6.関数式
7.関数加速
8.終了

1.関数とは?


プログラミングでは、関数が入力値を受け入れて出力値を返します.
入力値を受け取ると、関数は関数内の論理を実行して成果物(出力値)を返します.
たとえば、任意の料理を作る関数がある場合は、お菓子を入力値として使用できます.
関数は餅を受け取り、特定の論理を実行し、結果として餅スープを与えます.
JavaScriptでは、入力値を「パラメータ」、出力値を「戻り値」と呼びます.
  • 入力転送値:パラメータ、パラメータ
  • 入力値
  • :引数、パラメータ
  • 出力値:戻り値、戻り値
  • 2.関数の使用理由


    1.再利用可能です.
    2.実行ロジックをブロック化し、外部からデータを非表示にできます.(スキャンコンセプト)

    3.関数リットル


    関数もオブジェクトです.
    エンティティを作成できるようにします.
    const a = {.....}
    関数は、テキストで関数を作成することもできます.
    関数テキストで関数を定義する
    function (){......}
    関数ライブラリはfunction(パラメータ){関数体}で構成されています.
    関数テキストに名前がありません(匿名関数).

    4.関数の定義


    関数を定義する方法は4つあります.
    1.関数宣言として定義
    function add(x, y) {return x + y;}
    2.関数式として定義
    const add = function (x, y) {return x + y;}
    3.Function作成者として定義
    const a = new Function(’x’, ‘y’, ‘return x + y’)
    4.矢印関数として定義
    const add = (x, y) ⇒ x + y;

    5.関数宣言


    関数宣言はfunctionキーワード+名前+関数テキストで生成されます.
    関数宣言は変数には割り当てられませんが、JavaScriptで変数に割り当てることができます.
    function sayHi() {
       console.log("Hi!");
    }  
    sayHi() // Hi!
    ただし、()グループ演算子で関数宣言をラップすると、関数テキストになります.
    (function greet() { console.log("Hello"); })
    greet() // ReferenceError: greet is not defined
    関数宣言(sayHi関数)と関数宣言(greet関数)の呼び出し方が異なります.
    sayHi関数は外部呼び出し可能ですがgreet関数は外部呼び出しできません.
    関数ライブラリ(greet関数)はjavascriptエンジンによって単純な加算、減算などの計算演算子として認識されるため、greet関数オブジェクトがメモリに割り当てられた場合、メモリを指す識別子(名前)はありません.このため,外部ではこの関数の存在を知らないため,ReferenceErrorが発生する.()グループ演算子を実行するには、()を貼り付けるだけです.ただし、関数定義と同時にすぐに実行され、一度だけ呼び出され、再呼び出されません.この関数をインスタント実行関数IIFE(即時呼び出しの関数式)と呼ぶ.
    (function greet() { console.log("Hello"); })()

    逆にsayHi()を呼び出さないと、関数宣言は実行されません.
    また、関数テキストとは異なり、外部で呼び出すことができるのは、sayHi関数オブジェクトがメモリに割り当てられている場合、メモリを参照する識別子が生成されるためです.
    したがって,関数の存在を識別子で関数外部で確認することができる.

    呼び出された関数は、関数名ではなく、関数オブジェクトの識別子を指します。


    6.関数式


    JavaScript関数は1レベルのオブジェクトなので、変数に関数オブジェクトを割り当てることができます.
    しかし、関数の名前は一般的に省略されます.
    関数式は、関数テキストを変数に割り当てるために使用します.
    メモリ参照値の識別子名は変数(add)を格納します.
    const add = function(x, y) {
      return x + y;
    }
    add(2,5)

    7.関数加速


    コード作成とは、コンパイルフェーズ(コード実行前)にすべての宣言(変数、関数、クラス)をメモリに割り当てることです.したがって、宣言する前に変数などを参照することができます.これは,このプロセスがコードの先端に宣言された「現象」のように,「昇格」という言葉を用いた理由である.
    関数を定義する前に、関数宣言を呼び出すことができます.
    関数式は、関数定義の前に呼び出すことはできません.

    関数宣言)

    console.log(add(2,5)) // 7
    function add(x,y) { return x + y; }
    関数宣言は反発し、コード実行前にJavaScriptエンジンは関数オブジェクトをhipメモリに割り当てるので、関数を定義する前に関数を呼び出すことができます.

    整理すると、
  • は、実行時より前にJavaScriptエンジンによって最初に実行されることを宣言する.
  • 関数を宣言として定義する場合は、まず関数オブジェクトを作成し、
  • を定義します.
  • コードを実行すると、生成された関数オブジェクトを参照したり、呼び出したりできます.
  • 関数式)

    console.log(add(2,5)) // TypeError: add is not a function
    var add = function(x, y) {return x + y;}
    関数式は、変数に関数を割り当てます.
    変数はメモリにのみ割り当てられます.
    つまり.
    let a=2;
    1️⃣ let a; -> 宣言
    2️⃣ a=2; ->代入文
    これは変数反発を処理する際に処理するが,簡単に言えば)
    varは宣言と同時に初期化され、未定義の値を割り当てます.
    let,constは初期化せずに宣言するだけです.

    したがって、関数式
    a() // ⛔️ ReferenceError 
    let a = function(){...}
    a() // ⛔️ TypeError
    var a = function(){...}
    変数a宣言部分のみをメモリ、関数(){...}に割り当てます.代入文はコード実行時に処理されるため、関数の前にlet、cont変数が初期化されないため、ReferenceErrorが発生します.
    varはdefined値であるため、undfinedを呼び出すとタイプエラーが発生します.
    逆に、関数宣言は、関数宣言と同時にhipメモリに割り当てられます.

    8.終了


    今回のグループでDROVERDODと関数を学習したところ,関数名ではなく関数オブジェクトを指す識別子で呼び出されることしか知られていないことが分かった.
    それだけでなく、ホイスティンは「一番上に引っ張っただけだ」と思っていた.
    実行時にすべての宣言をメモリに割り当て、メモリに割り当ててからコードを実行します.したがって、変数または関数宣言とは、定義する前に呼び出すことができるものを指します.