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


Groups > comp.lang.javascript > #16135

Re: silly question on closure

Message-ID <7227299.QoKgMUOf8L@PointedEars.de> (permalink)
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Organization PointedEars Software (PES)
Date 2012-09-24 01:10 +0200
Subject Re: silly question on closure
Newsgroups comp.lang.javascript
References <a9704993-d83a-4392-8a65-82755e9ba320@u15g2000yql.googlegroups.com> <k3kocg$8ok$1@news.albasani.net>
Followup-To comp.lang.javascript

Followups directed to: comp.lang.javascript

Show all headers | View raw


Stefan Weiss wrote:

> On 2012-09-22 14:04, justaguy wrote:
>> Code:
> [snipped]
> 
>> Question:
>> The closure takes so many lines while the function has only 2 lines to
>> get the same thing done.  So, the question is, why do we use closure?
> 
> You don't, just like you don't actually use "Hello, world" in production
> code. This was obviously just an example for how closures work. If this
> was code intended for actual use, your "just a function" variant would
> be better suited (provided it only returned the value, like in the
> "closure" example).

You are mistaken as you are overlooking that creating that Array instance 
and populating it with elements requires resources – memory and runtime.  
Since we have only automated garbage collection, and the function may be 
called a number of times, it is better to use a closure here, so that the 
object would only be created, and the array only populated, once.

There is, however, a caveat to intended closures of that kind that can turn 
out to be a disadvantage: The order of execution matters.  All variables 
used in the outer function must have the proper value *before* the outer 
function is called that returns the inner function.  (As the reader might 
recall, I have stumbled on that myself in JSX:object.js several times.)

In a library that uses closures for optimization and did not start out with 
the module pattern, this can mean that at one point the whole library must 
use the module pattern, i. e. all its definitions must be enclosed in one 
inner function.  (I am currently in the process of refactoring JSX:object.js 
like that so that I do not have to care any longer about execution order, 
potentially having to sacrifice backwards-compatibility along the way.)
 
> One case where the closure variant would be preferred is if the contents
> of then "names" array would take a long time to compute, or if they were
> fetched from a remote source.

One, and certainly not the only or most likely case.


PointedEars
-- 
    realism:    HTML 4.01 Strict
    evangelism: XHTML 1.0 Strict
    madness:    XHTML 1.1 as application/xhtml+xml
                                                    -- Bjoern Hoehrmann

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


Thread

silly question on closure justaguy <lichunshen84@gmail.com> - 2012-09-22 05:04 -0700
  Re: silly question on closure Stefan Weiss <krewecherl@gmail.com> - 2012-09-22 18:18 +0200
    Re: silly question on closure justaguy <lichunshen84@gmail.com> - 2012-09-22 18:41 -0700
    Re: silly question on closure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-09-24 01:10 +0200
      Closures (was: silly question on closure) Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-09-24 13:14 +0200
      Re: silly question on closure Stefan Weiss <krewecherl@gmail.com> - 2012-09-27 05:04 +0200
        Re: silly question on closure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-09-27 20:50 +0200
          Re: silly question on closure Stefan Weiss <krewecherl@gmail.com> - 2012-09-27 21:29 +0200
  Re: silly question on closure "Tom de Neef" <tdeneef@qolor.nl> - 2012-09-22 20:00 +0200
    Re: silly question on closure justaguy <lichunshen84@gmail.com> - 2012-09-22 18:42 -0700
      Re: silly question on closure justaguy <lichunshen84@gmail.com> - 2012-09-23 07:31 -0700
        Re: silly question on closure Stefan Weiss <krewecherl@gmail.com> - 2012-09-23 18:49 +0200
          Re: silly question on closure justaguy <lichunshen84@gmail.com> - 2012-09-23 13:33 -0700
          Re: silly question on closure justaguy <lichunshen84@gmail.com> - 2012-09-23 13:38 -0700
            Re: silly question on closure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-09-24 20:49 +0200
    Re: silly question on closure Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-09-24 01:14 +0200
  Re: silly question on closure dann90038@gmail.com - 2012-09-23 15:37 -0700

csiph-web