Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.javascript > #8001

Re: calling function within (function() {...})();

Message-ID <2999240.SPkdTlGXAF@PointedEars.de> (permalink)
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Organization PointedEars Software (PES)
Date 2011-11-04 20:44 +0100
Subject Re: calling function within (function() {...})();
Newsgroups comp.lang.javascript
References <j-mdnaRhWZiHRS7TnZ2dnUVZ_uednZ2d@westnet.com.au> <j90o0s$vmv$1@dont-email.me> <m21utoav44.fsf@nntp.bednarz.nl> <8928443.SEqChMirdb@PointedEars.de> <m2wrbfaoiv.fsf@nntp.bednarz.nl>
Followup-To comp.lang.javascript

Followups directed to: comp.lang.javascript

Show all headers | View raw


Eric Bednarz wrote:

> Thomas 'PointedEars' Lahn <PointedEars@web.de> writes:
>> Eric Bednarz wrote:
>>> Gregor Kofler <usenet@gregorkofler.com> writes:
>>>> Am 2011-11-04 13:18, Andrew Poulos meinte:
>>>>> var x = (function(){
>>>>>              return {
>>>>>                a : function(){},
>>>>>                b : function(){}
>>>>>              };
>>>>>           })();
>>> 
>>> var x = (function () {
>>>     function a() {
>>>         b();
>>>     }
>>>     function b() {
>>> 
>>>     }
>>>     return {
>>>         a: a,
>>>         b: b
>>>     };
>>> }());
>>
>> There is no inherent advantage in that.  In fact, it is slightly less
>> efficient than the original code because the `a' and `b' identifiers need
>> to be resolved first,
> 
> If a, b[, n] are used a lot in a context where they need not be methods
> of an object, it would seem futile (and – depending on the number of
> calls – quite inefficient) to me to call them as methods of an object
> nevertheless.

The sole purpose of this code is to return a reference to a newly created 
object and assign that reference to `x'.  By contrast to a simple Object 
literal, though, this pattern provides the possibility of "private 
properties" (local variables of the created execution context) that can only 
be accessed from the object's initial methods through the closure.

You have provided code that adds no inherent value to that but, in addition 
to the drawbacks already mentioned, in `b', which is called by the a() 
method of the object, `this' does not refer to that object.  I fail to see 
the logic in that.

You might also want to take note of the fact that at least one object is 
always involved when a function is called in an ECMAScript implementation.

>>> window.setTimeout(x.a, 0);
>>
>>  window.setTimeout(function() { x.a(); }, 10);
> 
> You don’t say (I suppose creating a superfluous function object is
> justified by not resolving those pesky identifiers first :^)

The Function instance is not superfluous.  If you do not use the function 
expression here, then only the reference to `x.a' will be called, which 
means that `x.a' will be called as a method of the object that `window' 
refers to, or if you will, the global object.  As a result, `this' in `x.a' 
would not refer to the same object as `x', but to the other object.  We have 
been over this ad nauseam.

>> The asynchronous call is unnecessary here, though.
> 
> That’s the problem of all artificial example code. In the origignal
> code, calling a function expression that does nothing but returning an
> object was unnecessary, too.

Your logic is flawed.  *You* have introduced the unnecessary asynchronous 
call for no good reason.


PointedEars
-- 
Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no one
will want to steal it.)
  -- from <http://www.vortex-webdesign.com/help/hidesource.htm> (404-comp.)

Back to comp.lang.javascript | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

calling function within (function() {...})(); Andrew Poulos <ap_prog@hotmail.com> - 2011-11-04 23:18 +1100
  Re: calling function within (function() {...})(); Gregor Kofler <usenet@gregorkofler.com> - 2011-11-04 14:06 +0100
    Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-04 14:13 +0100
      Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-04 15:49 +0100
        Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-04 16:35 +0100
          Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-04 20:44 +0100
            Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-04 21:16 +0100
              Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-04 21:24 +0100
                Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-04 21:46 +0100
                Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-04 23:29 +0100
        Re: calling function within (function() {...})(); Scott Sauyet <scott.sauyet@gmail.com> - 2011-11-04 10:29 -0700
          Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-09 15:17 +0100
            Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-09 20:13 +0100
              Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-11 23:26 +0100
                Re: calling function within (function() {...})(); Eric Bednarz <bednarz@fahr-zur-hoelle.org> - 2011-11-11 23:31 +0100
                Re: calling function within (function() {...})(); Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2011-11-12 00:38 +0100

csiph-web