Functionコンストラクタ

特徴として以下。

  1. コードの実行時に動的に生成しコンパイルできる
  2. コンストラクタを使う度に新しい関数オブジェクトが生成される(非効率の問題)
  3. 静的スコープを使わず、トップレベルの関数としてコンパイルされる
3については重要

関数リテラルの場合

var a="global";

function f(){
  var a="local";
  return function(){alert(a)}
}
f()(); // 'local'

Functionコンストラクタの場合

var a="global";

function f(){
  var a="local";
  return new Function('alert(a)');
}
f()(); // 'global'