TalkPHP

TalkPHP (http://www.talkphp.com/forums.php)
-   Javascript, AJAX, E4X (http://www.talkphp.com/javascript-ajax-e4x/)
-   -   closures and memory leaks (http://www.talkphp.com/javascript-ajax-e4x/4180-closures-memory-leaks.html)

allworknoplay 04-23-2009 02:46 PM

closures and memory leaks
 
JS closures is still a little bit beyond my understanding but in this article I am reading, I just don't see what the author is pointing out...

He says:

Quote:

Even defining the simplest of functions can create closures:
Code:

var x = 5;
var n = function(){
    y=10;
    return y;
}

Quote:

It doesn't seem like we are creating a closure here, but we are. Why? When we create our function it gets a reference to all variables in its current scope, so we are creating a new reference to our x variable.


Now I keep staring at that code, and I don't see what he's talking about? The function has only one variable in it's scope, and that's the Y variable in which he returns it.

How does that have any affect at all on the X variable?

I am reading it from here:

http://www.htmlgoodies.com/primers/j...le.php/3606701

Wildhoney 04-23-2009 04:59 PM

I assume what he's attempting to say is that both x and n contain the function which returns y. However, x.toString() appears to show 5 to me, which I'd expect.

If x were a reference to n then that'd be expected behaviour, but it isn't, and so I don't understand why he's telling us that.

Perhaps somebody else has a better idea.

Salathe 04-23-2009 05:39 PM

Quote:

Originally Posted by allworknoplay (Post 23352)
Now I keep staring at that code, and I don't see what he's talking about? The function has only one variable in it's scope, and that's the Y variable in which he returns it.

Sure, there's only one variable used (aside: not declared) inside the function but the variable x is still available to be used. For example:

JavaScript Code:
var x = 5;
var n = function(){
    var y = 10;
    return x + y;
};

// … some time later
x = 113;
alert(n()); // 123
 

sketchMedia 04-24-2009 11:36 AM

He may be trying to show that top level variables are automatically made global (because JS has no linker, so throws it all into a global namespace), thus setting the stage to explain cyclic references in closures and why they happen.

I may be wrong ofc.


All times are GMT. The time now is 07:56 AM.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0