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

Reply via email to