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も言っている
じゃあ要らねーじゃん!と思うかも知れませんが、文を動的に生成できるのが強み。
この記事が気に入ったらサポートをしてみませんか?