私は電卓で使用しようとしnew Function()
ましたが、それが入っている関数に渡している引数にアクセスできないことがわかりました。私は次のように使用しています:
function go(a, b, c) {
return new Function('return a + b + c')();
}
go(4, '/', 2);
しかし、 a が未定義であると言われているため、機能していません。これを回避する方法はありますか?
私は電卓で使用しようとしnew Function()
ましたが、それが入っている関数に渡している引数にアクセスできないことがわかりました。私は次のように使用しています:
function go(a, b, c) {
return new Function('return a + b + c')();
}
go(4, '/', 2);
しかし、 a が未定義であると言われているため、機能していません。これを回避する方法はありますか?
あなたはおそらく欲しい:
function go(a, b, c) {
return new Function('return ' + a + b + c + ';')();
}
go(4, '/', 2);
しかし、これは正しい方法ではありません。サポートしているアクションごとに異なる関数を作成します。
@Truthは、あなたが達成しようとしていることの彼の評価において正しいと信じています。a
しかし、なぜ未定義なのか気になりました。
実は、この仕様ではFunction
、コンストラクターとして使用される場合、評価される関数本体のスコープはグローバル環境であると
規定されています。セクション15.3.2.1
eval()
これは、現在のスコープを使用するものとは異なります。
おそらくこれ?
var add = function (a, b, c) {
return a + b + c;
};
次に、次のように呼び出します。
var sum = add(3, 4, 5); // sum is 12