JavaScriptでeval()を特定のコンテキストで呼び出す方法


関数を特定のコンテキストで呼び出す方法について解説します。eval()関数は文字列として渡されたJavaScriptコードを実行するため、コンテキストによって実行結果が異なることがあります。

まず、eval()関数を特定のコンテキストで呼び出す方法として、Functionコンストラクタを使用する方法があります。以下に例を示します。

function evaluate(code, context) {
  return Function('"use strict"; return (' + code + ')').call(context);
}
// 使用例
const obj = { x: 10 };
const code = 'this.x + 5';
const result = evaluate(code, obj);
console.log(result); // 結果: 15

上記の例では、evaluate()関数を定義し、Functionコンストラクタを使用して渡されたコードを関数として評価します。call()メソッドを使って、指定したコンテキスト (context) を設定して関数を呼び出しています。

また、別の方法として、with文を使用する方法もあります。ただし、with文は厳格モード ("use strict") では使えないため、注意が必要です。以下に例を示します。

const obj = { x: 10 };
const code = 'x + 5';
with(obj) {
  const result = eval(code);
  console.log(result); // 結果: 15
}

上記の例では、with文を使用してコード内での変数のスコープを指定したオブジェクト (obj) に設定しています。その後、eval()関数を呼び出すことで、指定したコンテキスト内でコードを評価しています。

以上がJavaScriptでeval()関数を特定のコンテキストで呼び出す方法の簡単な例です。コードの実行結果が安全であることを確認するために、注意深く検討してください。