Perché non è possibile accedere alle variabili con ambito utilizzando eval
in una dichiarazione with
?Come mai eval non ha accesso alle variabili con scope sotto a con istruzione?
Ad esempio:
(function (obj) {
with (obj) {
console.log(a); // prints out obj.a
eval("console.log(a)"); // ReferenceError: a is not defined
}
})({ a: "hello" })
EDIT: Come l'esperto CMS ha sottolineato, questo sembra essere un bug del browser (browser che utilizzano la console WebKit).
Se qualcuno si chiedeva che cosa abominevole che stavo cercando di venire con che richiederebbe sia il "male" e eval
with
- Stavo cercando di vedere se potessi ottenere una funzione (utilizzata come un callback) eseguita in un altro contesto piuttosto che quello in cui è stato definito. E no, I probabilmente non lo uso da nessuna parte .. più curioso di ogni altra cosa.
(function (context,fn) {
with (context)
eval("("+fn+")()");
})({ a: "hello there" }, function() { console.log(a); })
In quale browser stai ricevendo questo comportamento? Stai eseguendo il codice su qualche console? – CMS
@CMS: Chrome 5.0.375.125 beta che utilizza la console di sviluppo integrata. Modifica: ho appena provato questo con Firefox (firebug) e ha funzionato come previsto. Deve essere un bug del browser come hai detto tu. –
@Daniel - Funziona correttamente in Chrome 6.0.472.22 se questo aiuta qualsiasi –