最終更新:2018-01-08 (月) 05:00:31 (2302d)  

JavaScript/関数
Top / JavaScript / 関数

https://developer.mozilla.org/ja/docs/JavaScript/Reference/Functions_and_function_scope

概要

  • 関数を定義するのには3つの方法がある
  • 関数もオブジェクト

関数宣言 (function文)

  • function name([param[, param[, ... param]]]) {
       statements
    }
    
    //multiply と命名された関数の 関数宣言
    function multiply(x, y) {
       return x * y;
    }
    multiply("hoge");
    window.multiply("hoge");//windowオブジェクトのプロパティとして宣言される
    
    obj.method = multiply;//代入もできる 
  • 関数宣言は同時にその関数名と同じ名前の変数を作成

JavaScript/関数式 (function演算子)

  • function [name]([param] [, param] [..., param]) {
       statements
    }
    
    //変数 multiply に代入された、無名関数の関数式
    var multiply = function(x, y) {
       return x * y;
    }
    //変数 multiply に代入された、func_name と命名された関数式
    var multiply = function func_name(x, y) {
       return x * y;
    }
  • 関数名 name を省略する事ができ、その場合関数は無名関数と見なされます。(JavaScript/無名関数)
  • 関数名は関数本体の内部でのみ使用する事ができる。関数本体の外側でそれを使用しようとするとエラー
  • 式なので式の中に書ける。

Functionコンストラクタ

  • new Function ([arg1[, arg2[, ... argN]],] functionBody)
    
    //Function コンストラクタによって定義され、変数 multiply に代入された関数
    var multiply = new Function("x", "y", "return x * y;");
    
    multiply(1,2);
    
    obj.method = multiply;//代入もできる 
  • Function コンストラクタを関数として (new 演算子を使わずに) 呼び出しても、コンストラクタとして呼び出すのと同じ効果があります。
  • Function によって定義された関数は関数名を持ちません。

アロー関数

その他

arguments

  • 引数はargumentsオブジェクトから扱える
    • arguments.length
    • arguments[i]

関数がそれ自身を参照する方法

入れ子の関数とクロージャ

  • 関数の内部に関数を入れ子にする事ができます。
    • 入れ子にされた (内側の) 関数は、それを含む (外側の) 関数に対してプライベートです。

クロージャ

  • 自由変数と同時にその変数を束縛する (式を「閉じて」いる) 環境を持ち得る式 (主として関数)
    • 内側の関数には外側の関数内の文からのみアクセスできる。
    • 内側の関数はクロージャを形成する。内側の関数は外側の関数の引数と変数を使う事ができるが、外側の関数は内側の関数の引数と変数を使う事はできない。

即時関数

メモ

閉じた関数

  • 関数内部で参照する変数が引数とローカル変数のみの関数

開いた関数

関連

メモ

  • 全ての関数がデフォルトで返す値はundefined

参考