evalunderwithステートメントを使用してスコープ変数にアクセスできないのはなぜですか?
例えば:
(function (obj) {
with (obj) {
console.log(a); // prints out obj.a
eval("console.log(a)"); // ReferenceError: a is not defined
}
})({ a: "hello" })
編集:知識のあるCMSが指摘したように、これはブラウザのバグ(WebKitコンソールを使用するブラウザ)のようです。
誰かが私が思いついた嫌悪感が「悪」evalとwith-の両方を必要とするのではないかと思っていたら、関数(コールバックとして使用)を別のコンテキストで実行できるかどうかを確認しようとしていましたで定義されました。そして、いいえ、私はおそらく(咳)これをどこにも使用しません..何よりも好奇心が強いです。
(function (context,fn) {
with (context)
eval("("+fn+")()");
})({ a: "hello there" }, function () { console.log(a); })