>& STDOUT

主にソフトウェアに関する日々の標準出力+標準エラー出力

function文とfunction式とFunctionコンストラクタと。

部屋とYシャツと私と俺とお前と大五郎。javascriptでおなじみの関数周りの仕様について、昔からMDCに詳しく載っていたのですが、ようやく実感できてきたので、自分用解釈メモ。

function 文

function multiply(x, y) {
   return x * y;
}
  • 同時にその関数名と同じ名前の変数を作成する
    • 「関数名」と「その関数が代入された変数名」は違う(!)
  • 定義されたスコープ内ではその名前でアクセス可能
  • 宣言より前に使える(parseの時点でインスタンスができる?)

function 式 (function 演算子)

var multiply = function(x, y) {
   return x * y;
}
  • 実行時にインスタンスができるのでこの式より前にmultiply()では使えない
  • 現在のスコープを継承する(=クロージャを形成する)

Function コンストラクタ

var multiply = new Function("x", "y", "return x * y;");
  • 関数名を持たない。SpiderMonkeyは内部的に”anonymous”としている。
  • グローバルスコープのみ
  • ("x", "y", "return x * y;") が呼ばれるたびにparseされるからすんごい遅い
    • あんまり使わないほうがいいよ、とMDCも言っている

じゃあ要らねーじゃん!と思うかも知れませんが、文を動的に生成できるのが強み。