mobiletim
mobiletim

Reputation: 313

Javascript function copies

I have a question about how javascript stores functions internally. Given this code:

var makesomething = function (x) {
    var thing = {
        x: x 
    };

    thing.do = function () {
        this.x++;
    };

    return thing;
};

var x1 = makesomething(1);
var x2 = makesomething(2);

Since I called the makesomething function twice, does that mean that there are essentially two copies of the "do" function or do the objects have reference to the same function but get called with different closure?

Upvotes: 0

Views: 141

Answers (1)

nnnnnn
nnnnnn

Reputation: 150070

There are two copies, one created each time you called makesomething().

You'll notice that x1.do === x2.do is false.

If instead you do this:

var doIt = function() {
    this.x++;
};
var makesomething = function (x) {
    var thing = {
        x: x 
    };

    thing.do = doIt;

    return thing;
};

var x1 = makesomething(1);
var x2 = makesomething(2);

Then both refer to the same function, and x1.do === x2.do will be true.

Upvotes: 5

Related Questions