I'm not really sure that the "define outside of loop" form is actually less
readable, but I have a suspicion that Crankshaft ( V8's optimizing pipeline
) would notice that you are redefining/executing the same function in the
loop ( since there is no branch statement ) and optimize the definition out
of the loop.

Would be nice to get some benchmarks to confirm that though. I would
probably define the method outside anyway because personally I find that
more readable - its easier for me to read "doTask()" in a loop.

On Fri, Sep 14, 2012 at 3:42 PM, Shripad K <[email protected]>wrote:

> Why not use recursive functions?
>
> var a = getInitialData();
>
> function doSomething(el, i) {
>    if(i < a.length) {
>         /* do something non-blocking here*/
>        doSomething(a[i+1], i+1);
>    }
> }
>
> doSomething(a[0], 0);
>
> On Sat, Sep 15, 2012 at 12:00 AM, dhruvbird <[email protected]> wrote:
>
>> Hello Maxim,
>>
>> The real reason jslint gives you a warning is if you were to use the loop
>> variable "i" within the function in the closure, you would always get the
>> value of i to be a.length (assuming that the function isn't evaluated
>> synchronously and that you don't have another function declared within the
>> first one).
>>
>> The code as you have shown seems to be perfectly safe to use though.
>>
>> I wouldn't worry too much about the performance unless you profile it and
>> determine it to be a bottleneck.
>>
>> Regards,
>> -Dhruv.
>>
>>
>> On Thursday, September 13, 2012 2:00:42 AM UTC-4, Maxim Kazantsev wrote:
>>>
>>> It is a pretty typical approach to use an anonymous function for
>>> asynchronous calls from inside a loop:
>>>
>>> var a = getInitialData();
>>>> for (var i = 0, len = a.length; i < len; i++) {
>>>>   (function(el) {
>>>>     /* do something non-blocking here */
>>>>   })(a[i]);
>>>> }
>>>
>>>
>>> JSLint doesn't like this code with "Don't make functions within a loop"
>>> warning, and it is actually right since it really creates a new anonymous
>>> function on every single loop iteration. An obvious solution is to declare
>>> this function outside a loop, but it would make a code less readable. Even
>>> if a declaration would just precede the loop: you see a call here, you see
>>> a declaration somewhere else, and here you are, lost all your attention.
>>>
>>> My question is how bad this approach is for an overall performance? In
>>> particular, how fast and efficient a garbage collection of anonymous
>>> functions is? How much memory a typical anonymous function can consume and
>>> how long it may exist in a memory?
>>>
>>  --
>> Job Board: http://jobs.nodejs.org/
>> Posting guidelines:
>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
>> You received this message because you are subscribed to the Google
>> Groups "nodejs" group.
>> To post to this group, send email to [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]
>> For more options, visit this group at
>> http://groups.google.com/group/nodejs?hl=en?hl=en
>>
>
>  --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to