looks rather an eval gotcha but I think Firefox is correct anyway. try `f = eval("(" + f + ")");` instead and it should produce what you expect (I guess)
Regards On Wed, Jan 8, 2014 at 3:37 PM, Benjamin (Inglor) Gruenbaum < ing...@gmail.com> wrote: > I've recently run into this question in Stack Overflow: > > http://stackoverflow.com/q/21008329/1348195 > > ``` > > function f() { > f = eval("" + f); > console.log("Inside a call to f(), f is: \n%s", f);} > > f(); > > console.log("After a call to f(), f is: \n%s", f); > > ``` > > What should the output of the following be? > > I expected `undefined` on both but that's because I'm used to strict mode. > IE/Chrome treat this differently from Firefox and to be honest when I > checked the spec it boiled down to which context is affected here. > > In IE/Chrome the eval is creating `f` inside the context of `f` acting > like a function declaration inside. In Firefox it's acting like it's > running in the global context. > > Which is correct? I've tried to follow 10.4.2 (or 18.2.1 in the ES6 draft > which is nice) but I still couldn't figure out what "if there is no calling > context means". > > Thanks, > Benjamin Grunebaum > > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss > >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss