最終更新:2018-01-08 (月) 05:00:31 (2303d)
JavaScript/関数
Top / JavaScript / 関数
https://developer.mozilla.org/ja/docs/JavaScript/Reference/Functions_and_function_scope
概要
- 関数を定義するのには3つの方法がある
- 関数もオブジェクト
- 全ての関数は実際にはFunctionオブジェクト
関数宣言 (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]
関数がそれ自身を参照する方法
- 関数名
- arguments.callee
- その関数を参照するスコープ内変数
入れ子の関数とクロージャ
- 関数の内部に関数を入れ子にする事ができます。
- 入れ子にされた (内側の) 関数は、それを含む (外側の) 関数に対してプライベートです。
クロージャ
- 自由変数と同時にその変数を束縛する (式を「閉じて」いる) 環境を持ち得る式 (主として関数)
- 内側の関数には外側の関数内の文からのみアクセスできる。
- 内側の関数はクロージャを形成する。内側の関数は外側の関数の引数と変数を使う事ができるが、外側の関数は内側の関数の引数と変数を使う事はできない。
即時関数
メモ
閉じた関数
- 関数内部で参照する変数が引数とローカル変数のみの関数
開いた関数
- 自由変数を参照する関数
関連
メモ
- 全ての関数がデフォルトで返す値はundefined