On Mon, 14 Sep 2009 11:15:53 +0100, ajp <alistair.po...@gmail.com> wrote:

>
> I didn't expect this to work (with my 'compiler' hat on) but it does:
>
> var clickFunction = function() { $inner.doSomething() };
> $("div")
>     .append("<div id=inner>bla</div>")
>     .click(clickFunction);
>
> var $inner = $div.find("#inner");
>
> I was expecting an error for $inner to be undefined when the
> javascript parsed the first line, but the browser script engines seems
> quite happy with this sort of super-late declaration.
>
>

I guess that the clickFunction is executed when you actually click the  
element. At that point the $inner variable is looked up in the local  
scope. This is after the var has been initialised so the variable is  
found...

It's similar to the problem you often see people have with code like:

for (var i=0; i<5; i++) {
        $('item#' + i).click(
                function()
                {
                        alert(i);
                }
        );
}

People expect each item to alert it's own number but they will all alert 4  
as that is the value of i by the time the click handler is actually  
executed.

Hope that helps,

Kelvin :)

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-dev@googlegroups.com
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to