以下の内容はhttps://let.blog.jp/tag/withより取得しました。


変数を設定して文字列の JavaScript コードを実行
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
with っぽいことする
めったに使うものでもないけど module って with 使えないんだっけと思って with っぽいことを

const value = {foo: 1, bar: 2}
window.with = (v, f) => f(v)

window.with(value, ({foo, bar}) => {
console.log(foo, bar)
// 1 2
})

プロパティ名書かないといけないけど参照はこれでできる
必要なものだけにできるからいいかも

with だと代入もできる

const value = {foo: 1, bar: 2}
with(value){
foo = 10
bar = 20
}
console.log(value)
// {foo: 10, bar: 20}

関数実行する方だと参照じゃないから代入してもオブジェクトには影響しない



以上の内容はhttps://let.blog.jp/tag/withより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14