3

私は電卓で使用しようとしnew Function()ましたが、それが入っている関数に渡している引数にアクセスできないことがわかりました。私は次のように使用しています:

function go(a, b, c) {
    return new Function('return a + b + c')();
}

go(4, '/', 2);

しかし、 a が未定義であると言われているため、機能していません。これを回避する方法はありますか?

4

3 に答える 3

6

あなたはおそらく欲しい:

function go(a, b, c) {
    return new Function('return ' + a + b + c + ';')();
}

go(4, '/', 2);

しかし、これは正しい方法ではありません。サポートしているアクションごとに異なる関数を作成します。

于 2012-06-28T20:53:31.063 に答える
0

@Truthは、あなたが達成しようとしていることの彼の評価において正しいと信じています。aしかし、なぜ未定義なのか気になりました。

実は、この仕様ではFunction、コンストラクターとして使用される場合、評価される関数本体のスコープはグローバル環境であると 規定されています。セクション15.3.2.1

eval()これは、現在のスコープを使用するものとは異なります。

于 2012-06-28T21:17:08.360 に答える
0

おそらくこれ?

var add = function (a, b, c) {
  return a + b + c;
};

次に、次のように呼び出します。

var sum = add(3, 4, 5); // sum is 12
于 2012-06-28T21:00:18.703 に答える