爲什麼不能使用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