const code = `console.log(a + b)`
こういう文字列に入った JavaScript コードを実行したくて そのコード内で使われる変数は
const obj = { a: 1, b: 2}
みたいなオブジェクトで設定したいとき
シンプルでライブラリなどで見かけるものは with + eval
with(obj) { eval(code) }
// 3
with は推奨されないけど deprecated というわけではないのでこういうときには使うのは問題ないみたい
MDN によればパフォーマンス的にも遅くなるどころか優れてるらしい
with を使いたくない場合は こういうこともできる
Function(
...Object.keys(obj),
code
)(...Object.values(obj))
// 3
下のコードを実行するのと同じ
(function(a, b) {
console.log(a + b)
})(1, 2)
// 3