That is what MooTools does, however there are some other opinions about it.

On Mon, May 16, 2011 at 4:58 PM, Philip Thompson <[email protected]>wrote:

> IMO, you shouldn't have to deal with prefixing the anonymous function (or
> other statements) with a semi-colon. If you're the one writing the code, you
> *know* what will work when you compress your own code. I know that some
> compressors are more forgiving than others (e.g., YUI), but I believe it
> comes down to writing code properly. You wouldn't leave a plus sign off of
> your addition statement (for lack of a better analogy). Why not properly end
> all your statements with semi-colons?
>
> (function () {
>     var myVar = 'hi';
>     ...
> })();  // Add the semi-colon here
>
> var Pizza = {
>     isGood: function () { return true; }
> };   // Add the semi-colon here
>
> My $0.02. Happy coding.
>
> ~Philip
>
> On Sun, May 15, 2011 at 2:32 PM, Rolf -nl <[email protected]> wrote:
>
>> Thanks for the quick reply. I understood about closures and keeping
>> things private, but got sort of confused where I saw usage of:
>>
>> (function(){
>>
>> var hello = this.hello = 'yo';
>>
>> and nowhere hello was used down in the code. But I think it could be
>> there just as a standard anyway so I you would edit the code you don't
>> have to think about it and you could just use 'hello' somewhere as you
>> already defined it.
>>
>> })()
>>
>> about the ;function or !function etc. thanks for clearing up that
>> chars like + or ~ would also 'work' -- again, I understood from
>> reading elsewhere that people suggested the compressor would be wrong
>> and should be looked at if the extra ! or ; before the parenthese was
>> necessary to prevent errors (since trailing semi colons are not
>> required). But still I would see it being used inside files which made
>> me frown my eyebrows again.
>>
>>
>>
>> On May 15, 8:36 pm, Arian Stolwijk <[email protected]> wrote:
>> > You should read about closures.
>> >
>> > They help to prevent putting all kind of variables public.
>> >
>> > so you can wrap it with in a closure, or self-invoking-function, there
>> are
>> > several names and methods, but the basic example used in MooTools is:
>> >
>> > (function(){
>> >
>> > var private = 'yo';
>> >
>> > })();
>> >
>> > alert(private); // throws error
>> >
>> > But we don't want to put everything privately, but want to make it
>> > public. Fortunately we can just put something on the window object. The
>> > window object is equal to `this` in the browser:
>> >
>> > console.log(window == this);
>> >
>> > This is also true in closures:
>> >
>> > (function(){
>> >
>> > this.hello = 'yo';
>> >
>> > })();
>> >
>> > console.log(window.hello, this.hello, hello); // yo
>> >
>> > For better compression  you can do something like this:
>> >
>> > (function(){
>> >
>> > var hello = this.hello = 'yo';
>> >
>> > // now we can use hello here, which is private, instead of this.hello
>> every
>> > thime
>> >
>> > })();
>> >
>> > In 1.3.1 and in PowerTools .call(this) was used. .call and .apply work
>> like
>> > bind, but also execute the function. So here the inner this was set to
>> the
>> > outer this, which was still window. This supposed to fix something in
>> some
>> > fancy environments, but didn't work in node.js after all, since this
>> refers
>> > to something else there and not the global object.
>> >
>> > There are also other variants to fix nasty errors with compressing, when
>> the
>> > last ; is forgotten, see this example, which works ok
>> >
>> > (function(){
>> >
>> > })()
>> > (function(){
>> > })()
>> >
>> > but when we compress:
>> >
>> > (function(){})()(function(){})()
>> >
>> > which errors.
>> >
>> > Putting some other char before the (function(){, like a !, ; ~, + or
>> > whatever solves this problem.
>> >
>> > I hope this helps you and I've given you some pointers to search
>> further.
>> >
>> >
>> >
>> > On Sun, May 15, 2011 at 8:16 PM, Rolf -nl <[email protected]>
>> wrote:
>> > > Looking at Moo's source and following the syntax and code style rules
>> > > I was (in the past) used to do it like:
>> >
>> > > var myClass = new Class({
>> > > });
>> >
>> > > then people started to wrap it and adopted:
>> >
>> > > (function(){
>> >
>> > >    var myClass = new Class({
>> > >    });
>> >
>> > > })();
>> >
>> > > or an alternate ending for the wrap (like in cpojer's powertools):
>> >
>> > > }).call(this);
>> >
>> > > ryan florence is dropping trailing semi-colons in his (non mootools
>> > > released) js code (which is fine I think, others can disagree) but
>> > > starting code with a semi-colon before every parenthese like:
>> >
>> > > ;(function(){
>> > > })();
>> >
>> > > and I also noticed this:
>> >
>> > > var myClass = this.myClass = new Class({
>> > > });
>> >
>> > > since when are we also adding this.myClass? What is the benefit, why
>> > > is it important?
>> >
>> > > Ok, what I'm trying to say is that I see sort of the use of all of
>> > > this and I understand what it does, but I don't fully 'get' the path
>> > > to follow or why I would do it one way or the other.
>> >
>> > > Maybe someone can enlighten us here on the list or maybe a blog post
>> > > to take away some confusion.
>>
>
>

Reply via email to