为什么不能使用eval
underwith
语句访问作用域变量?
例如:
(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); })