To me it seems both version should work equally well. Each function scope created should be linked together, causing the "my_var" variable lookup to be found in the outer function when not defined in the local function scope. Unless I've misunderstood something about variable scoping in JavaScript.
On the other hand, it looks like you are just filtering elements by tag name, class and attribute value. Wouldn't it be nice to just use a selector instead? connect(el, 'onclick', function (e) { var my_var = getNodeAttribute(e.src(), 'someattr'); forEach($$("div.some_class[someattr='" + my_var + "']"), function(mydiv) { // do something } }); Cheers, /Per On Wed, Dec 3, 2008 at 4:18 PM, Eoghan <[EMAIL PROTECTED]> wrote: > > I commonly use forEach within another function, like the following > example: > > connect(el, 'onclick', function(e){ > var my_var = getNodeAttribute(e.src(), 'someattr'); > forEach(getElementsByTagAndClassName('div', 'some_class'), > function(mydiv){ > if(getNodeAttribute(mydiv, 'someattr') == my_var){ > // do something > } > } > }); > > Unfortunately 'my_var' takes on unexpected values, because the > function that acts as the body of the forEach is a closure (I think). > Converting the above code to use a plain old 'for' loop acts as > expected: > > connect(el, 'onclick', function(e){ > var my_var = getNodeAttribute(e.src(), 'someattr'); > var arr = getElementsByTagAndClassName('div', 'some_class'); > for(var i=0; i<arr.length; i++){ > var mydiv = arr[i]; > if(getNodeAttribute(mydiv, 'someattr') == my_var){ > // do something > } > } > }); > > Using a partial function for the forEach body with 'my_var' > preinitialised seems clunky to me and definitely reduces readability. > What is the most elegant way to make forEach behave as expected (as > illustrated by the second example)? > > Thanks! > > Eoghan > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "MochiKit" group. To post to this group, send email to mochikit@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/mochikit?hl=en -~----------~----~----~----~------~----~------~--~---