関数コンストラクタの記述方法
const func = new Function("a","b", "return a + b + d");
実験
関数宣言/コンストラクタで生成された関数は、ともにオブジェクトであり、コンストラクタであるか
instanceofで確認してみる
// スコープに注意!
let d = 99; //Functionをd
const fn1 = new Function("a","b", "return a + b + d");
function fn2(a,b){
return a + b
}
const result = fn1(1,2);
console.log(result)
// オブジェクトであるかどうか
console.log(fn1 instanceof Object)
console.log(fn2 instanceof Object)
// 関数コンストラクタから生成されたものであるか
console.log(fn1 instanceof Function)
console.log(fn2 instanceof Function)
注意すること1
→グローバルコンテキストにあるコンテキストを読み込んでしまう。
let d = 99; //Functionのd
const func = new Function("a","b", "return a + b + d");
→この場合のスコープが
// d=99はFunction内で普通に反映されますよ
注意すること2
thisを反映させるには、newを2回行う
const func = new Function("a","b", "console.log(a + b)");
const obj = new func()
こんな感じです
