为什么不能使用eval
在with
声明下访问范围变量?eval如何在with语句下无权访问范围变量?
例如:
(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); })
在其浏览器中你得到这个行为?你在某个控制台上运行代码吗? – CMS 2010-08-07 19:15:56
@CMS:Chrome 5.0.375.125测试版使用内置的开发者控制台。编辑:我刚刚尝试与Firefox(萤火虫),并按预期工作。必须是您所说的浏览器错误。 – 2010-08-07 19:19:58
@Daniel - 它可以在Chrome 6.0.472.22中正常运行,如果这有助于任何 – 2010-08-07 19:24:47