disabling "use strict"; everywhere

Andrea Giammarchi andrea.giammarchi at gmail.com
Wed Jan 30 09:07:10 PST 2013


actually, interesting enough, function expressions do not suffer this
problem ... this is getting weirder and weirder ...

with(this){
  alert(function isStrict() {"use strict";
    return this;
  }()); // undefined
}

br


On Wed, Jan 30, 2013 at 9:00 AM, Andrea Giammarchi <
andrea.giammarchi at gmail.com> wrote:

> let me rephrase ...
>
> putting `with(this){` before any build process/inlined library and `}` at
> the end of all concatenated files **nothing** is strict anymore ^_^
>
> function isStrict() {"use strict";
>   return this;
> }
>
> isStrict(); // undefined
>
> now, wraping the whole thing inside a with statement
>
> with(this){
>   function isStrict() {"use strict";
>     return this;
>   }
>   alert(isStrict()); // global object
> }
>
> forget the Function hack, there is no library able to ensure itself to be
> executed in strict mode.
> Using the width statement around any code makes it not strict.
>
> Thoughts ?
>
>
>
>
>
>
>
>
>
> On Wed, Jan 30, 2013 at 8:19 AM, Brandon Benvie <brandon at brandonbenvie.com
> > wrote:
>
>> Correction, the use strict directive needs to appear as the first
>> statement (ExpressionStatement) that's not an EmptyStatement and not a
>> FunctionDeclaration. Anything else will cause the directive to be ignored.
>>
>>
>> On Wed, Jan 30, 2013 at 11:15 AM, Brandon Benvie <
>> brandon at brandonbenvie.com> wrote:
>>
>>> To enable strict mode, the "use strict" expression must come as the
>>> first non-statement of a script or function body. That means
>>>     function x(){}
>>>     "use strict";
>>>
>>> Will enable strict mode, but
>>>
>>>     (function x(){});
>>>     "use strict";
>>>
>>> won't. To make your example strict, you'd have to do
>>>
>>>     with (ob) {
>>>       (function(){
>>>         "use strict'";
>>>         /* concatenated stuff */
>>>       })();
>>>     }
>>>
>>>
>>> On Wed, Jan 30, 2013 at 10:48 AM, Claude Pache <claude.pache at gmail.com>wrote:
>>>
>>>> Le 30 janv. 2013 à 06:12, Andrea Giammarchi <
>>>> andrea.giammarchi at gmail.com> a écrit :
>>>>
>>>> I have a blog post about it called
>>>>
>>>> Resurrecting The With Statement
>>>>
>>>> and before I post the link, there the long story short:
>>>>
>>>> putting `with(this){` before any build process/inlined library and `}`
>>>> at the end of all concatenated files nobody is strict anymore ^_^
>>>>
>>>>
>>>> For what I understand of ES5, putting some random stuff (other than
>>>> string literals or comments) before a "use strict" directive at the
>>>> beginning of a file will disable it. This is a known fact, orthogonal to
>>>> the "Function + with" dirty/creative hack of your blog post.
>>>>
>>>>  —Claude
>>>>
>>>>
>>>>
>>>> http://webreflection.blogspot.com/2013/01/resurrecting-with-statement.html
>>>>
>>>>
>>>> I actually like this possibility, but I'd like to know what you think
>>>> about it
>>>>
>>>>
>>>> br
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss at mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss at mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20130130/14c99d0d/attachment.html>


More information about the es-discuss mailing list