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