On Apr 19, 2010, at 11:13 PM, Peter van der Zee wrote:

On Mon, Apr 19, 2010 at 11:25 PM, Brendan Eich <[email protected]> wrote:
On Apr 19, 2010, at 4:27 PM, Peter van der Zee wrote:

ES5 introduced the concept of directives, using perfectly fine fallback with no side effects. This was, as far as the above goes, perfect. Older implementations couldn't possibly trip over it since a string literal without anything else has no visible side effects.

I should point out again that "use strict"; changes runtime semantics involving eval and arguments in ES5, it does not merely prevent programs from getting to runtime (i.e., it is not just stricter syntax, e.g. forbidding 'with').

This means that if you "use strict" you have to test your code in pre-ES5 and ES5-or-above implementations, to be sure you're not counting on the ES5 changes.

Usually you won't have a problem, but testing is the only way to be sure, if you are using eval and/or arguments in your strict code.


Correct me if I'm wrong but in the case of "use strict", doesn't that only apply restrictions? So as far as the difference between "use strict" and no strict are concerned, if a script works in strict mode shouldn't it also work in no strict?

No.

var x = "global";
alert((function () { "use strict"; eval("var x = 'dynamic';"); return x;})());

There are other such examples.


I can't recall any parts of the spec that include backwards incompatible extensions for that directive.

Of course for new syntax or using future reserved keywords or whatever, you're absolutely correct.

I was explicit in calling attention to eval and arguments.

/be

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to