<div dir="ltr">I think eval returns whatever it evaluates ... i.e.<div><br></div><div>`<span style="color:rgb(0,128,255);font-family:Menlo,monospace;font-size:11px;white-space:pre-wrap">var x = eval('123');</span>`</div>
<div><br></div><div>x will be 123 since it's returned. Accordingly, if you assign a function, this should be returned and become automatically an expression.</div><div><br></div><div>The inconsistency exists using explicitly parenthesis but I don't remember specs saying that eval should not return the evaluated content in case of function declaration.</div>
<div><br></div><div>Hard to tell which one is correct, the example is odd anyway.</div><div><br></div><div>Regards </div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jan 8, 2014 at 3:56 PM, Benjamin (Inglor) Gruenbaum <span dir="ltr"><<a href="mailto:inglor@gmail.com" target="_blank">inglor@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks for the reply. <div><br>I'd actually expect `undefined` because function declarations does not return anything. Converting it to a function expression kind of misses the point since those are well... expressions :) </div>


<div><br></div><div>I've tried looking in all the relevant places in the spec but still couldn't unambiguously figure out which browser is 'correct'.</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra">
<br><br><div class="gmail_quote">

On Thu, Jan 9, 2014 at 1:53 AM, Andrea Giammarchi <span dir="ltr"><<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div dir="ltr">looks rather an eval gotcha but I think Firefox is correct anyway. try `<span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline">f </span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline">=</span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline"> </span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(0,0,139)">eval</span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline">(</span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0)">"("</span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline"> </span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline">+</span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline"> f</span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline"> </span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline">+</span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline"> </span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline;color:rgb(128,0,0)">")"</span><span style="font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;font-size:13.63636302947998px;background-color:transparent;line-height:17.27272605895996px;white-space:pre-wrap;margin:0px;padding:0px;border:0px;vertical-align:baseline">);</span>` instead and it should produce what you expect (I guess)<br>



<div><br></div><div>Regards</div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div><div>On Wed, Jan 8, 2014 at 3:37 PM, Benjamin (Inglor) Gruenbaum <span dir="ltr"><<a href="mailto:inglor@gmail.com" target="_blank">inglor@gmail.com</a>></span> wrote:<br>



</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div dir="ltr">I've recently run into this question in Stack Overflow:<div><br></div>

<div><a href="http://stackoverflow.com/q/21008329/1348195" target="_blank">http://stackoverflow.com/q/21008329/1348195</a><br>
</div><div><br></div><div>

```</div><div><pre style="max-height:600px;width:auto;background-color:rgb(238,238,238);margin-bottom:10px;padding:5px;vertical-align:baseline;line-height:17.27272605895996px;font-size:13.63636302947998px;overflow:auto;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;margin-top:0px;word-wrap:normal;border:0px">


<code style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif"><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">function</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent"> f</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">()</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent"> </span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">{</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">
    f </span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">=</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent"> </span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">eval</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">(</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">""</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent"> </span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">+</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent"> f</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">);</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">
    console</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">.</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">log</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">(</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">"Inside a call to f(), f is: \n%s"</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">,</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent"> f</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">);</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">
</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">}</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">

f</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">();</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">

console</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">.</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">log</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">(</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">"After a call to f(), f is: \n%s"</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">,</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent"> f</span><span style="margin:0px;padding:0px;border:0px;font-size:13.63636302947998px;vertical-align:baseline;background-color:transparent">);</span></code></pre>





</div><div>```</div><div><br></div><div>What should the output of the following be?</div><div><br></div><div>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. </div>





<div><br></div><div>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.</div><div><br></div><div>





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".</div><div><br></div><div>Thanks,</div>





<div>Benjamin Grunebaum</div></div>
<br></div></div>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>