Behavior of `eval` in non strict mode.

Benjamin (Inglor) Gruenbaum inglor at
Wed Jan 8 15:37:41 PST 2014

I've recently run into this question in Stack Overflow:


function f() {
    f = eval("" + f);
    console.log("Inside a call to f(), f is: \n%s", 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".

Benjamin Grunebaum
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list