最終更新:2017-11-17 (金) 14:31:44 (30d)  

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

参考